2016-12-07 3 views
0

Jupyterノートブック(Python)を使用してmysql.connectorを使用してMySQLに接続し、csvファイルをデータベースにロードすると、 「;マニュアルをご確認フィールドセパレータ引数が期待されているものではありませんmysql.connector.errors.ProgrammingError:1083(42000)」 mysql.connector.errors.ProgrammingError:1083(42000):フィールド区切り引数が期待通りではありません

self.cursor.execute("LOAD DATA LOW_PRIORITY LOCAL INFILE 'deficiency.csv' \ 
    REPLACE INTO TABLE retailstore.deficiency CHARACTER SET utf8 \ 
    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '"' LINES TERMINATED BY '\r\n' \ 
    IGNORE 1 LINES") 
そして私は、エラーメッセージが表示されました:私は試してみました。

私は、MySQLでまったく同じSQLクエリを使用してcsvファイルをロードすると、Pythonで失敗したものの、動作します。

どこに問題があるのか​​を教えてもらえますか?ありがとうございました!

答えて

0

self.cursor.executeに渡す前に、実行しようとしているSQL文字列をprintだけ試しましたか?そうした場合

することは、あなたはこの出力を取得します:

LOAD DATA LOW_PRIORITY LOCAL INFILE 'deficiency.csv'  REPLACE INTO TABLE retailstore.deficiency CHARACTER SET utf8  FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY ' ESCAPED BY ' LINES TERMINATED BY ' 
'  IGNORE 1 LINES 

が、この時慎重に見てください、あなたはそれについての物事のカップルに注意しましょう:

  • OPTIONALLY ENCLOSED BYESCAPED BYがありますそれに続いて'が表示されます。は表示されません。
  • TERMINATED BY 'の後に改行があります。あなたはトリプル引用されrawstringを使用している場合、

    self.cursor.execute("LOAD DATA LOW_PRIORITY LOCAL INFILE 'deficiency.csv' \ 
    REPLACE INTO TABLE retailstore.deficiency CHARACTER SET utf8 \ 
    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' ESCAPED BY '\"' LINES TERMINATED BY '\\r\\n' \ 
    IGNORE 1 LINES") 
    

    を代わりにあなたを:

は、それを修正するには、\r\nでも、バックスラッシュOPTIONALLY ENCLOSED BYESCAPED BY、と後に二重引用符をエスケープする必要があります\r\nに二重引用符やバックスラッシュをエスケープする必要はありません、あなたはまた、各行の末尾にバックスラッシュを必要としません:

self.cursor.execute(r"""LOAD DATA LOW_PRIORITY LOCAL INFILE 'deficiency.csv' 
    REPLACE INTO TABLE retailstore.deficiency CHARACTER SET utf8 
    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '"' LINES TERMINATED BY '\r\n' 
    IGNORE 1 LINES""") 

オリジナルのコードがなぜそれを生成したのか疑問に思うかもしれません。理由は、実際には互いに隣に3つの文字列リテラルがあるからです。そのうちの一つは、次のものが

' ESCAPED BY ' 

(Pythonで文字列リテラルが'または"で囲むことができます)、最後の一つは、あなたが入れた場合

"' LINES TERMINATED BY '\r\n' \ 
IGNORE 1 LINES" 

である

"LOAD DATA LOW_PRIORITY LOCAL INFILE 'deficiency.csv' \ 
    REPLACE INTO TABLE retailstore.deficiency CHARACTER SET utf8 \ 
    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '" 

です2つの文字列リテラルが互いに隣り合っていると、Pythonはそれらを連結します:

>>> print("12"'34'"56") 
123456 
+0

ありがとうございました! "mysql.connector.errors.DatabaseError:1205(HY000):ロック待ちタイムアウトを超えました;トランザクションを再開しようとしました"というエラーメッセージが返されている間に改訂コードを試しました。 – Ramona

+0

@Ramona:申し訳ありません、いいえ、私は前にそのメッセージを見逃していません。 –

関連する問題