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
。
的文档中都有描述
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
。