Python中执行Oracle查询并将结果插入新建Oracle表的语法是什么
方案1:同库场景最优(单条SQL直接完成,无需数据经过Python)
如果新旧表在同一个Oracle数据库下,直接执行INSERT + SELECT组合语句就行,性能最好,代码也最简单:
import cx_Oracle # 替换为你自己的数据库连接信息 DB_USER = "你的用户名" DB_PWD = "你的密码" DB_HOST = "数据库IP" DB_PORT = 1521 DB_SERVICE = "服务名" # 建立连接 dsn = cx_Oracle.makedsn(DB_HOST, DB_PORT, service_name=DB_SERVICE) with cx_Oracle.connect(user=DB_USER, password=DB_PWD, dsn=dsn) as conn: with conn.cursor() as cursor: # 注意:如果你的旧表字段名确实是attribute 3(中间带空格),需要写成"attribute 3" insert_sql = """ INSERT INTO 你的新表名 (attribute1, attribute2, attribute3) SELECT attribute1, attribute2, attribute3 FROM mytable WHERE qc_code = 'F' """ cursor.execute(insert_sql) # 提交事务 conn.commit() print(f"成功插入{cursor.rowcount}条数据")
如果还没安装cx_Oracle依赖,先执行pip install cx_Oracle安装即可。
方案2:数据经过Python处理(适合后续要加校验、转换等自定义逻辑)
如果后续你需要对查询出来的数据做清洗、转换再插入,就用先查后插的方式:
import cx_Oracle DB_USER = "你的用户名" DB_PWD = "你的密码" DB_HOST = "数据库IP" DB_PORT = 1521 DB_SERVICE = "服务名" dsn = cx_Oracle.makedsn(DB_HOST, DB_PORT, service_name=DB_SERVICE) with cx_Oracle.connect(user=DB_USER, password=DB_PWD, dsn=dsn) as conn: with conn.cursor() as cursor: # 1. 执行查询取数 query_sql = "SELECT attribute1, attribute2, attribute3 FROM mytable WHERE qc_code = 'F'" cursor.execute(query_sql) data_list = cursor.fetchall() if not data_list: print("没有查询到符合条件的数据") exit() # 2. 批量插入新表 insert_sql = "INSERT INTO 你的新表名 (attribute1, attribute2, attribute3) VALUES (:1, :2, :3)" # 批量插入比循环单条插性能高很多 cursor.executemany(insert_sql, data_list) conn.commit() print(f"成功插入{len(data_list)}条数据")
注意事项
- 你贴的查询语句里
attribute 3中间有空格,如果是字段名本身带空格,SQL里需要用双引号包裹,写成"attribute 3",如果是输入时的笔误,改成实际的字段名即可 - 所有占位的中文(用户名、密码、新表名等)都要替换成你自己的实际配置
- 代码里用了with语句自动管理连接和游标资源,不用手动写关闭逻辑,避免资源泄漏
内容的提问来源于stack exchange,提问作者user7002207
相关产品推荐
相关产品推荐

