求Python脚本:从Oracle提取数据并插入SQL Server
Oracle数据提取并插入SQL Server的Python脚本实现
要实现将Oracle提取的数据插入SQL Server,你可以使用pyodbc库连接SQL Server,同时采用批量插入逻辑提升效率。以下是补充完整的代码实现:
完整代码
import cx_Oracle import pyodbc # ---------------------- Oracle 连接与数据提取 ---------------------- # Oracle 连接配置 oracle_user = "username" oracle_password = "password" oracle_dsn = "servername/PROD" # 建立Oracle连接 oracle_conn = cx_Oracle.connect(user=oracle_user, password=oracle_password, dsn=oracle_dsn) oracle_cursor = oracle_conn.cursor() # 显式指定查询字段(避免SELECT *导致字段匹配问题) query = """ SELECT DRAW_NUM, COL1, COL2, COL3 -- 替换为你的实际字段名 FROM LOTTO_BI.LOTO_DRAW_RESULTS ORDER BY DRAW_NUM """ oracle_cursor.execute(query) # 获取字段名与查询结果集 columns = [desc[0] for desc in oracle_cursor.description] data = oracle_cursor.fetchall() # ---------------------- SQL Server 连接与数据插入 ---------------------- # SQL Server 连接字符串(根据实际环境调整) sql_server_conn_str = ( "DRIVER={ODBC Driver 17 for SQL Server};" "SERVER=your_sql_server_name;" "DATABASE=your_database_name;" "UID=sql_username;" "PWD=sql_password;" ) # 建立SQL Server连接 sql_server_conn = pyodbc.connect(sql_server_conn_str) sql_server_cursor = sql_server_conn.cursor() # 构造批量插入语句 insert_query = f""" INSERT INTO LOTO_DRAW_RESULTS ({', '.join(columns)}) VALUES ({', '.join(['?' for _ in columns])}) """ # 批量插入数据(可根据数据量调整批量大小) batch_size = 1000 for i in range(0, len(data), batch_size): batch = data[i:i+batch_size] sql_server_cursor.executemany(insert_query, batch) sql_server_conn.commit() # ---------------------- 关闭资源 ---------------------- oracle_cursor.close() oracle_conn.close() sql_server_cursor.close() sql_server_conn.close() print("数据迁移完成")
关键注意事项
- 字段匹配:确保SQL Server目标表的字段数量、顺序、数据类型与Oracle查询的字段完全对齐,禁止用
SELECT *模糊查询。 - 依赖安装:需要安装
pyodbc库(pip install pyodbc),并在服务器上安装对应版本的SQL Server ODBC驱动(如ODBC Driver 17 for SQL Server)。 - 性能优化:批量插入比逐行插入效率提升显著,可根据数据总量调整
batch_size参数。 - 异常处理:生产环境建议添加
try-except块捕获连接、查询、插入过程中的异常,避免程序意外崩溃。 - 资源释放:操作完成后必须关闭游标和数据库连接,避免资源泄漏。
内容的提问来源于stack exchange,提问作者Pravesh Loto
相关产品推荐
相关产品推荐

