**怎么python实现读SQL Server表的数据插入MySQL,存在数据跳过呢,初学者,只会清空表格,全部重新插入,怎么将新的插入 **
import pyodbc
import pymysql
from datetime import datetime
import time
# SQL Server数据库连接配置信息
server = '127.0.0.1'
database = 'Dianhan'
username = 'sa'
password = '123456'
while True:
try:
# 建立与SQL Server数据库的连接,修正驱动部分
conn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER=' + server + ';DATABASE=' + database + ';UID=' + username + ';PWD=' + password)
# 连接MySQL数据库
conn2 = pymysql.connect(host='127.0.0.1', user='root', password='123456', database='test', port=3306)
# 获取SQL Server表的列名
sql_server_cursor = conn.cursor()
column_names_query = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME ='weldmeasureprot_t'"
sql_server_cursor.execute(column_names_query)
column_names = [row[0] for row in sql_server_cursor.fetchall()]
# 查询SQL Server表的所有数据
sql_server_data_query = "SELECT * FROM Weldmeasureprot_T"
sql_server_cursor.execute(sql_server_data_query)
sql_server_data = sql_server_cursor.fetchall()
# 构建插入到MySQL表的SQL语句,使用正确的表名
placeholders = ', '.join(['%s'] * len(column_names))
if not column_names:
print("未能获取到有效的列名列表,请检查相关查询或数据库连接。")
raise ValueError("列名列表为空,无法继续构建插入语句。")
insert_query = "INSERT INTO weldMeasureProt_t ({}) VALUES ({})".format(', '.join(column_names), placeholders)
# insert_query = "INSERT INTO weldMeasureProt_t ({}) VALUES ({})".format(', '.join(column_names), '%s')
# placeholders = [''] * len(column_names)
# 获取MySQL插入操作的游标
mysql_cursor = conn2.cursor()
# 插入前清空表
mysql_cursor.execute("TRUNCATE TABLE weldMeasureProt_t ")
# 遍历插入数据到MySQL表
for row in sql_server_data:
values = []
for i, column in enumerate(column_names):
values.append(row[i])
mysql_cursor.execute(insert_query, tuple(values)) # values传入元祖
print(values)
print()
# 提交MySQL插入操作,使数据生效
conn2.commit()
print("数据从SQL Server成功迁移到MySQL。%s"%datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
except pyodbc.Error as e:
print(f"连接或操作SQL Server数据库时出错: {e}")
except pymysql.Error as e:
print(f"连接或操作MySQL数据库时出错: {e}")
finally:
# 关闭SQL Server游标和连接
if 'sql_server_cursor' in locals():
sql_server_cursor.close()
if 'conn' in locals():
conn.close()
# 关闭MySQL游标和连接
if 'mysql_cursor' in locals():
mysql_cursor.close()
if 'conn2' in locals():
conn2.close()
time.sleep(10)