【问题标题】:How to get a result from multiple select statements with pymysql如何使用 pymysql 从多个选择语句中获取结果
【发布时间】:2017-06-06 19:54:43
【问题描述】:

基本上,我有以下示例(假设 cur 来自有效连接):

>>> con =  pymysql.connect(<parameters go here>)
>>> cur = con.cursor()
>>> sql = "SELECT @a := 0; SELECT @a := @a+2; SELECT @a;"
>>> res = cur.execute(sql)
>>> res
1

如您所见,res 返回整数 1,这意味着 sql 运行良好。但是,最后一个选择应该返回数字 2,我需要那个数字。

如果我运行这段代码(由@falsetru 建议),我也得不到我需要的东西:

>>> cur.execute(sql)
1
>>> cur.fetchall()
[{u'@a := 0': 0}]

我怎样才能找回它?是否可以不分离 SQL 语句?

【问题讨论】:

    标签: python mysql pymysql


    【解决方案1】:

    使用Cursor.fetchone 获取单行,或使用Cursor.fetchmany/Cursor.fetchall 获取多个或所有结果行。

    row = cur.fetchone()
    a = row[0]
    

    UPDATE Cursor.execute 执行单个 sql 语句,因此单独执行语句(通过将 sql 拆分为 ;

    import pymysql
    con =  pymysql.connect(user='root', password='root')
    cur = con.cursor()
    sql = "SELECT @a := 0; SELECT @a := @a+2; SELECT @a;"
    for stmt in sql.split(';'):
        if stmt.strip():
            cur.execute(stmt)
    row = cur.fetchone()
    a = row[0]
    print(a)  # => 2
    

    【讨论】:

    • 谢谢。我害怕这是我唯一的选择。无论如何,对于那些看这里的人,如果,并且只有当你必须多次执行相同的语句(这不是我的情况),你可以看看cursor.executemany
    猜你喜欢
    • 1970-01-01
    • 2016-10-31
    • 1970-01-01
    • 1970-01-01
    • 2013-11-03
    • 2016-11-14
    • 1970-01-01
    • 2021-08-04
    • 2018-07-16
    相关资源
    最近更新 更多