Python aiomysql在我的查询参数周围放置了一组引用

时间:2016-05-05 12:25:37

标签: python mysql

我正在使用python的aiomysql执行函数来执行sql查询。

@asyncio.coroutine
def select(sql,args=None,size=None):
    log(sql,args)
    global __pool
    with (yield from __pool) as conn:
        cur = yield from conn.cursor()
        yield from cur.execute(sql.replace('?','%s'),args or ())
        if size:
            rs = yield from cur.fetchmany(size)
        else:
            rs = yield from cur.fetchall()
    __pool.close()
    yield from __pool.wait_closed()

    return rs

在测试功能中我做了

@asyncio.coroutine
def test():
    yield from create_pool(loop=loop,user='app',passwd='app')
    sql = 'select ? from ?'
    arg = ['id','users']
    rs = yield from select(sql,arg)
    print(rs)

    global __pool
    __pool.close()
    yield from __pool.wait_closed()

在终端我收到错误

pymysql.err.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''users'' at line 1")

围绕用户似乎有一组引用。我试过更换最后一个? %s和那个工作,显然是?为id工作但不为用户工作。为什么围绕用户有一组引用,我该如何解决?

感谢您的回答

2 个答案:

答案 0 :(得分:2)

SQL参数不能用于MySQL的元数据。您将需要清理该值并正常替换它。

答案 1 :(得分:1)

对于可能有同样问题的其他人来说,似乎不可能使用arg来引用表,在传递给execute之前必须指定表