1

整数、文字列、およびリストを単一のレコードとしてデータベースに挿入しようとしていますが、エラーが発生しています。

これが私のコードです:

values=nprnd.randint(10, size=48) #NUMPY ARRAY
valuelist= map(None, values); #Convert to list
guid=''.join(random.choice(string.ascii_uppercase + string.digits) for x in range(20)) #Generate guid
for x in range(4):
    var_string = ', '.join('?' * 48)
    valuelist.insert(0,x)
    valuelist.insert(0,ent_guid)
    #50 coloums in table, guid, x and 48 randomly generated values
    query_string = 'INSERT INTO schema1 VALUES (%s,%d,%s);' % (guid, x, var_string) 
    cursor.execute(query_string, valuelist)

次のようなエラーが表示され続けます。

Traceback (most recent call last):
  File "script.py", line 19, in <module>
    cursor.execute(query_string, valuelist)
  File "/Library/Python/2.7/site-packages/MySQL_python-1.2.4b4-py2.7-macosx-10.8-intel.egg/MySQLdb/cursors.py", line 184, in execute
    query = query % db.literal(args)

私はこのエラーの原因を知っています (SO でも同じエラーについていくつか質問があります) が、私が試した解決策のどれもこのエラーを解決しませんでした

どんな助けでもいただければ幸いです

4

4 に答える 4

0

valuelistループを通過するたびに のサイズを 2 ずつ増やしているようです。

valuelist.insert既存のリストの先頭に新しいアイテムを追加するため、最初のループでvaluelistは 50 個の要素が含まれ、次は 52 個、次は 54 個というようになります。

query_stringただし、48 項目のプレースホルダーしか含まれていないため、エラーが発生します。

これらの行を削除し、「?」を変更すると '%s' に変更すると、より良い結果が得られるはずです。例:

for x in range(4):
    var_string = ', '.join('%s' * 48) 
    query_string = "INSERT INTO schema1 VALUES ('%s',%d,%s);" % (guid, x, var_string) 
    cursor.execute(query_string, valuelist)
于 2013-04-23T16:44:54.350 に答える
-1

クエリ内で値を一重引用符で囲んでみてください。

query_string = "INSERT INTO schema1 VALUES ('%s','%d','%s');" % (guid, x, var_string)
于 2013-04-23T15:04:18.097 に答える