2

Python MySQLConnectorを使用して、数値を含むセットをMySQLデータベースに追加しようとしています。手動でデータを追加することはできますが、%sを使用した次の式は機能しません。私はこれについていくつかのバリエーションを試しましたが、私の場合、ドキュメントから何も機能していないようです。ご覧のとおり、テーブルはすでに作成されています。

#Table erstellen:
#cursor.execute('''CREATE TABLE anzahlids( tweetid INT  )''')

これが私のコードとエラーです:

print len(idset)
    id_data = [
        len(idset)
    ]
    print id_data
    insert = ("""INSERT INTO anzahlids (idnummer) VALUES (%s)""")
    cursor.executemany(insert, id_data)
    db_connection.commit()

"フォーマットパラメータの処理に失敗しました;%s"%e)
mysql.connector.errors.ProgrammingError:フォーマットパラメータの処理に失敗しました; map()の引数2は反復をサポートする必要があります

4

2 に答える 2

3

遅い答えですが、もっと良いコードを投稿したいと思います。また、元の質問はMySQL Connector/Pythonを使用することでした。

executemany()の使用は間違っています。executemany()メソッドは、タプルのシーケンス(たとえば、[(1、)、(2、)])を予期します。

当面の問題については、executemany()は実際には役に立たないため、execute()を使用する必要があります。

cur.execute("DROP TABLE IF EXISTS anzahlids")
cur.execute("CREATE TABLE anzahlids (tweetid INT)")

some_ids = [ 1, 2, 3, 4, 5]
cur.execute("INSERT INTO anzahlids (tweetid) VALUES (%s)",
            (len(some_ids),))
cnx.commit()

また、MySQL Connector / Pythonでは(MySQLdbとは異なり)、コミットしていることを確認する必要があります。

(ドイツ語を話さない人への注意:「anzahlids」は「number_of_ids」を意味します)

于 2013-07-09T08:39:11.677 に答える
0

以下は私のマシンで動作した例です。

import MySQLdb
db = MySQLdb.connect(host="localhost", user="stackoverflow", passwd="", db="stackoverflow")
cursor = db.cursor()
try:
    sql = 'create table if not exists anzahlids( tweetid int ) ; '
except:
    #ignore
    pass

sql = ("""INSERT INTO anzahlids (tweetid) VALUES (%s)""")
data = [1,2,3,4,5,6,7,8,9]
length = [len(data)]
cursor.executemany(sql,length)
db.commit()

idsetが単一の値である場合、使用できます

sql = ("""INSERT INTO anzahlids (tweetid) VALUES (%s)""") % len(idset)
cursor.execute(sql)
db.commit()
于 2013-03-23T20:39:27.523 に答える