2016-04-18 6 views
3

Python 2を使用しています。 私は学習の練習としてmysql.connectorを使って遊んでいて、いくつかの作業用インサートを作っていて、奇妙な(私にとっては)問題に遭遇しました - 私は間違ったことをしていると確信しています。私はいくつかのテーブルの2つのカラムに挿入していました。最初の例のようなものです。 1つの列に挿入した場合に構文エラーが発生しました。python mysqlが1つの変数だけを入力すると構文エラーが発生する

このような構文だけで正常に動作する理由の任意のアイデア:

query_publisher = "INSERT INTO publisher (name) "\ 
        "VALUES (%s) " \ 
        "ON DUPLICATE KEY UPDATE PUBLISHER_ID=LAST_INSERT_ID(PUBLISHER_ID)" 
    args_publisher = (publisher_name) 

[EDIT]:

query_publisher = "INSERT INTO publisher (name, name2) "\ 
        "VALUES (%s, %s) " \ 
        "ON DUPLICATE KEY UPDATE PUBLISHER_ID=LAST_INSERT_ID(PUBLISHER_ID)" 
    args_publisher = (publisher_name, publisher_name2) 

私が本当にやりたいことであるしかし、この構文は、構文エラーがスローされます。

 cursor.execute(query_publisher, args_publisher) 

エラー:どちらの場合も、私はこれを実行しています

MySQLの
1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '%s ON DUPLICATE KEY UPDATE PUBLISHER_ID=LAST_INSERT_ID(PUBLISHER_ID)' at line 1 
+0

はどのようにこのクエリを実行していますか? – tadman

+0

cursor.execute(query_publisher、args_publisher) - 私はどちらの場合でもこれを使用しています。 –

+0

私はPythonに精通していませんが、Perlのようなものであれば、 'args_publisher'はリスト型の代わりにスカラーであるかもしれません。中間変数でこれをやっている理由はありますか? '(publisher_name、)'がリストを強制的に修正して問題を解決するだろうか? – tadman

答えて

2

構文の実行には1要素のタプルであるとき、それはカンマを省略しないでください(publisher_name,)する必要があり、tupleあるべきexecute(query_statement, tuple_values)

args_publisher = (publisher_name)ある

+0

ありがとう、haifzhan。それがそれでした。私はタッドマンがちょっとした道を歩いていたと思うし、タプルを供給することになっていた。みんなありがとう! –

関連する問題