2017-07-28 5 views
0

リストから各値をpython、mysqlデータベース、mysqldbを使ってデータベースに挿入しようとしています。データベース内のこのリスト内のすべての要素の型はVARCHARです。リストから要素をmysqlデータベースに挿入するときの型エラー

はTypeError:文字列中に変換されていないすべての引数リストの内包がしようとすると、私がしました。この現在の問題を解決するために、空の文字列を削除し、ためにすることです

書式設定

しかし、私はこのエラーを取得しています各要素を文字列にキャストしようとしましたが、機能しませんでした。私はまた、クエリ関数内の文字列にキャストしようとしましたが、どちらもうまくいきませんでした。

値は-3.89738e-05

タイプ(値) "タイプ 'str' は" です

for scan in outer: 
    scan = [str(x) for x in scan if x] 
    for value in scan: 
     print value 
     print type(value) 
     sql_insert = ('INSERT INTO langmuir_data(currentI)' 
         'VALUES("%s")') 
     cursor.execute(sql_insert, str(value)) 

私はこのエラーを取得し、どのようにそれを修正するよ、なぜ誰もが知っていますか?

+2

そして、あなたのクエリは、 'SQL_INSERT = "" "" "langmuir_data(currentI)VALUES(%sの)。INSERT INTO"'と 'カーソルである場合.execute(sql_insert、(str(value)、)) '何が起こるのですか? – roganjosh

+0

同じことが起こりますが、どちらも有効な構文です。私はこのプログラムで他のプログラムや他のリストとの構文をうまく使いました。 –

+1

SQLでは、パラメータをタプルとして渡していないので、別のことをする前に使用しました。あなたは私が書いた両方の行をコピー/ペーストしましたか? – roganjosh

答えて

1

パラメータ化されたクエリを実行すると、パラメータがiterable(私がコメントに入れたタプル)で渡されることが期待されます。複数のパラメータを渡すと、指定したプレースホルダにこれらのパラメータが展開されるため、問題はありません。しかし、1つの文字列を渡すと、それはまだPythonではiterableなので、その文字列を文字ごとにプリペアドステートメントに挿入しようとします。だから、

for item in ('abc',): 
    print item # prints whole string, for which you provided a placeholder 

for item in 'abc': 
    print item # prints the individual letters, but you only gave 1 placeholder 

、次を使用する必要があります。

cursor.execute(sql_insert, (str(value),)) 
関連する問題