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 连接器/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 连接器/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 回答