2016-04-03 39 views
0

における真=マルチI持ってのpython mysql.connectorで次のクエリ:使用cursor.execute(クエリ)mysql.connector Pythonの

query="SELECT `AUTO_INCREMENT`FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'cl55-mm-px-db' AND TABLE_NAME = 'dj_Venues';" 
cursor.execute(query) 
autoV=str(cursor.fetchone()) 
autoV=autoV.replace('(','').replace(')','').replace(',','') 
query="REPLACE INTO dj_Venues SET venueName = %s,venueAddress = %s,venueBands = %s,venueResident = %s,city=%s,country=%s;'" 
variable=(venue,address,venueID,venueID1,city,country1) 
cursor.execute(query,variable)   
query="SELECT `AUTO_INCREMENT`FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'cl55-mm-px-db' AND TABLE_NAME = 'dj_Events';" 
cursor.execute(query) 
autoE=str(cursor.fetchone()) 
autoE=autoE.replace('(','').replace(')','').replace(',','') 
query="REPLACE INTO dj_Events SET eventName = %s,bandsintownID = %s,residentID=%s,date = %s,startTime=%s,sourceBands=%s,sourceResident=%s;'" 
variable=(eventName,eventID,eventID1,date,start,source,source) 
cursor.execute(query,variable) 
query="REPLACE INTO dj_Master SET artistID = %s,eventID = %s,venueID = %s;'" 
variable=(artistID,autoE,autoV) 
cursor.execute(query,variable) 

そして私は、私は次のエラーを取得するこのスクリプトを実行すると

"Use multi=True when executing multiple statements") 
mysql.connector.errors.InterfaceError: Use multi=True when executing multiple statements 

cursor.execute()multi=Trueを追加しましたが、クエリが実行されないため、私のテーブルが空のままです!

+1

代わりに、ステートメントの最後からセミコロンを削除してください。なぜなら、これらのエラーメッセージが表示される理由です。副作用として、私はこのライブラリがPython DB API仕様を無視し、 'cursor.executemany()'を使用するのではなく、 'execute'に' multi = True'を追加して失望しました。 –

+0

Thanks @MartijnPieters、あなた答えは私を助けた! –

答えて

0

すべてのステートメントの末尾には、セミコロンの末尾にセミコロン(;)があります。これらを削除、cursor.execute()で実行しているときに、これらが必要とされていないと、エラーメッセージを作成するものである:

query="SELECT `AUTO_INCREMENT`FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'cl55-mm-px-db' AND TABLE_NAME = 'dj_Venues'" 
cursor.execute(query) 

次へ]を、行にstr()を使用しないでください。

autoE = cursor.fetchone()[0] 

か、単に一つの変数にタプルの割り当てを使用します:

あなただけの1の値を持つ場合は、タプルへ

autoE = ''.join(cursor.fetchone()) 

か、単にインデックス:あなたは値を連結し、使用str.join()をしたい場合

autoE, = cursor.fetchone() 

行に複数の結果が含まれていると、後者はエラーをスローします。これは、クエリの変更時にバグを見つけるのに役立ちますes。

関連する問題