找回密码
立即注册
发新帖

316

积分

0

好友

81

主题
发表于 2025-4-2 08:30:03 | 查看: 45| 回复: 3
用python解决:
1、存在两个数据库分别为mssql和mysql
2、使用python连接这两个数据库
3、mssql数据库的名称为jinghaoK3CLOUD
4、myssql数据库的名称为ecology,数据库中存在表名为formtable_main_188的表
5、mssql查询语句为:
     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 > '2025-01-01'
  AND t1.FBILLNO LIKE 'XOUT%'
  AND t2.FSOORDERNO <> ''
  AND PATINDEX('%[^0-9]%', t2.FSOORDERNO) > 0
  AND LEN(t2.FSOORDERNO)<14
6、将mssql的查询结果t1.FDATE更新到mysql数据库formtable_main_188表的sjfhsj字段中
7、更新的条件为formtable_main_188表中的pino与mssql查询结果中的t2.FSOORDERNO相同

睡觉是向死亡的借贷,睡得越多越长,那么还款期也越长。
发表于 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()
发表于 2025-4-2 08:30:48

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

发表于 2025-4-2 08:35:53

OA里面的应用建模搭建的表和字段详情






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|企业IT论坛

GMT+8, 2025-10-26 04:05 , Processed in 0.123827 second(s), 91 queries .

快速回复 返回顶部 返回列表