【问题标题】:mysql.connector, multi=True, sql variable assignment not workingmysql.connector,multi=True,sql 变量赋值不起作用
【发布时间】:2015-08-25 02:30:33
【问题描述】:

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,但这是其他人编写的遗留脚本,我没有时间重写所有内容。

感谢您的帮助。

【问题讨论】:

    标签: python-2.7 mysql-connector


    【解决方案1】:

    当您使用multi=True 时,execute() 将返回一个生成器。您需要遍历该生成器以实际将处理推进到多语句查询中的下一个 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()的文档中都有描述

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-24
      • 2012-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多