|
|
发表于 2025-4-2 08:30:25
import pyodbc #引入pyodbc库用于连接MSSQL数据库,如果没有的话使用命令pip install pyodbc进行安装
import pymysql #引入pymysql库用于连接myssql数据库,没有的话使用命令pip install pymysql进行安装
from datetime import datetime #语句的作用是从Python的datetime模块中导入datetime类。这意味着你可以直接使用datetime类而不需要通过模块名来引用它。
# 连接MSSQL数据库
try:
mssql_conn = pyodbc.connect(
'DRIVER={ODBC Driver 17 for SQL Server};'
'SERVER=mssql服务器的IP地址;' # 替换为实际服务器地址
'DATABASE=mssql数据库名;'
'UID=mssql数据库的用户名;' # 替换为实际用户名
'PWD=mssql数据库的的密码' # 替换为实际密码
)
mssql_cursor = mssql_conn.cursor()
except Exception as e:
print(f"连接MSSQL失败: {e}")
exit()
# 连接MySQL数据库
try:
mysql_conn = pymysql.connect(
host='mysql服务器的IP地址', # 替换为实际主机地址
user='mysql的用户名', # 替换为实际用户名
password='mysql的密码', # 替换为实际密码
database='mysql的数据库名',
port=mysql的端口, #如果是默认端口3306的话此行可以删除不用
charset='utf8mb4'
)
mysql_cursor = mysql_conn.cursor()
except Exception as e:
print(f"连接MySQL失败: {e}")
mssql_conn.close()
exit()
# 执行MSSQL查询
try:
query = """
SELECT t1.FDATE, t2.FSOORDERNO
FROM T_SAL_OUTSTOCK t1
INNER JOIN T_SAL_OUTSTOCKENTRY_R t2 ON t1.FID = t2.FID
WHERE t1.FDOCUMENTSTATUS = 'C'
AND t1.FDATE > DATEADD(DAY, -180, CAST(GETDATE() AS DATE))
AND t1.FBILLNO LIKE 'XOUT%%'
AND t2.FSOORDERNO <> ''
AND PATINDEX('%%[^0-9]%%', t2.FSOORDERNO) > 0
AND LEN(t2.FSOORDERNO)<14
"""
mssql_cursor.execute(query)
results = mssql_cursor.fetchall()
except Exception as e:
print(f"执行MSSQL查询失败: {e}")
mssql_conn.close()
mysql_conn.close()
exit()
# 准备更新MySQL数据
update_count = 0
try:
update_sql = """
UPDATE formtable_main_188
SET sjfhsj = %s
WHERE pino = %s
"""
# 直接使用datetime对象或格式化为字符串
params = [
(row.FDATE.strftime('%Y-%m-%d'), row.FSOORDERNO) # 格式化为'YYYY-MM-DD'
# 或者直接传递datetime对象:(row.FDATE, row.FSOORDERNO)
for row in results
]
# 批量执行更新
if params:
mysql_cursor.executemany(update_sql, params)
update_count = mysql_cursor.rowcount
mysql_conn.commit()
print(f"成功更新 {update_count} 条记录")
else:
print("没有需要更新的数据")
except Exception as e:
print(f"更新MySQL数据失败: {e}")
mysql_conn.rollback()
finally:
# 关闭连接
mssql_cursor.close()
mssql_conn.close()
mysql_cursor.close()
mysql_conn.close() |
|