mysql.connector、multi=True、sql 变量赋值不起作用

mysql.connector, multi=True, sql variable assignment not working

SQL 代码(全部在一个文件中,最终保存在 python 变量 "query" 中):

select @dtmax:=DATE_FORMAT(max(dt), '%Y%m') from table_A;
delete from table_B where  DATE_FORMAT(dt, '%Y%m')=@dtmax;

mysql-connector 是否允许像我在上面的查询中所做的那样使用变量赋值。即从 TABLE_A 中获取 max(date) 的值,并从 TABLE_B 中删除具有该日期的所有内容。

python代码:

    c = conn.cursor(buffered=True)
    c.execute(query, multi=True)
    conn.commit()
    conn.close()

我所知道的是第二个SQL语句没有执行。

我可以将 SQL 代码复制并粘贴到 Toad 中,然后 运行 在那里没有任何问题,但不能通过 mysql.connector 库。我会使用 pandas 但这是别人写的遗留脚本,我没有时间重写所有内容。

非常感谢您的帮助。

当您使用 multi=True 时,execute() 将 return 生成器。您需要迭代该生成器以实际将处理推进到多语句查询中的下一个 sql 语句:

c = conn.cursor(buffered=True)
results = c.execute(query, multi=True)
for cur in results:
    print('cursor:', cur)
    if cur.with_rows:
        print('result:', cur.fetchall())
conn.commit()
conn.close()
如果当前语句有要提取的结果,

cur.with_rows 将是 True

这在MySQLCursor.execute()

的文档中都有描述