2016-05-05 14 views
1

私はPythonのaiomysql execute関数を使用してSQLクエリを実行しています。テスト機能でPython aiomysqlは、クエリ引数を引用符で囲みます。

@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 

は、私は、エラーのユーザーの周りの引用符のセットがあるように見える

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") 

を得たターミナルで

@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() 

をしました。私は最後を変えようとした? 〜%sになっていて、何とかうまくいけば、明らかに? idのために働いたが、ユーザーのために働かなかった。ユーザーの周りに引用符があるのはなぜですか?どのように修正できますか?

答えて

2

SQLパラメータは、MySQLとのメタデータには使用できないができ、あなたの答えをあなたに感謝します。あなたは値を浄化し、それを通常と置き換える必要があります。

同じ問題を抱えているかもしれない他の誰のために
+0

はあなたが少しを起草いただけます実行し、多分与えるに渡す前に指定する必要がありそうです例。私はちょっとあなたが意味するものに混乱している – demalegabi

+0

https://dev.mysql.com/doc/refman/5.0/en/information-schema.html –

1

、それがテーブルを参照するために引数を使用することは不可能だように、テーブルは

関連する問題