Python mysql连接器插入%s

时间:2013-03-23 20:34:35

标签: python mysql mysql-python mysql-connector

我正在尝试使用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必须支持迭代

2 个答案:

答案 0 :(得分: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')

答案 1 :(得分: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()