在Python中从列表迭代中插入表值

时间:2016-05-06 08:23:52

标签: python mysql sql

我尝试从结果列表中迭代并尝试在表exdata中插入值,但我看起来解决方案的每个位置,但没有什么对我有用

if not result:
    print 'list is empty'
else:
    for i in xrange(0,len(result)):
        for item  in  result[i].iteritems():
            query="INSERT INTO exdata (cve_id,severity, published,modified) \
                   VALUES ('%s', '%s', '%s', '%s')" % (item[i], item[1][0],item[1][1],item[1][2])
        cursor.execute(query)

3 个答案:

答案 0 :(得分:0)

您必须致电commit以实际将值插入数据库 另请注意,您的execute位于内部循环之外,因此它只会执行上一次迭代的查询。

if not result:
    print 'list is empty'
else:
    for i in xrange(0,len(result)):
        for item  in  result[i].iteritems():
            query="INSERT INTO exdata (cve_id,severity, published,modified) \
                   VALUES ('%s', '%s', '%s', '%s')" % (item[i], item[1][0],item[1][1],item[1][2])
            cursor.execute(query)

            cursor.commit()

答案 1 :(得分:0)

我在您的代码中看到了2个问题:

1)需要在循环中执行查询
2)添加用于修复更改的提交语句

if not result:
    print 'list is empty'
else:
    for i in xrange(0,len(result)):
        for item  in  result[i].iteritems():
            query="INSERT INTO exdata (cve_id,severity, published,modified) \
                   VALUES ('%s', '%s', '%s', '%s')" % (item[i], item[1][0],item[1][1],item[1][2])
            cursor.execute(query)
        connection.commit()

答案 2 :(得分:0)

如果您使用MySQLdb并想要进行多行插入, 尝试使用executemany

import MySQLdb

db = MySQLdb.connect("myhost", "myuser", "mysecret", "mydb")
# users is a list of (userid, first_name, last_name, company)
c = db.cursor()
c.executemany("""INSERT INTO users
(userid, first_name, last_name, company)
VALUES (%s, %s, %s, %s)""", users)
db.commit()
db.close()

在MySQLdb中,它在内部转换为多行INSERT,据报道是2-3阶 幅度更快。