使用for循环使用Python列表中的数据填充Sqlite3列

时间:2015-11-10 01:16:24

标签: python sqlite

我试图在Python中使用sqlite3,使用for循环迭代列表中的所有项目并使用该数据填充列。我的下面的代码有望解释这个问题:

import sqlite3 as lite

test_run = ['tommy', 'olga', 'peter', 'lulu']


con = lite.connect("test.db")
cur = con.cursor()
cur.execute('DROP TABLE IF EXISTS test1;')
cur.execute('CREATE TABLE test1(symbol TEXT); ')
for i in test_run:
    name = i
    print name

cur.executemany('INSERT INTO test1 VALUES(?)',name)

with con:

cur = con.cursor()
cur.execute("SELECT * FROM test1")

rows = cur.fetchall()

for row in rows:
     print row

如果这是非常基本的,我道歉,但我刚刚学习了Python,这是我第一次使用SQL。当我打印名称时,似乎这应该有效,但是当使用fetchall查看正在填充的内容时,它显示为:

(u't',)
(u'o',)
(u'm',)
(u'm',)
(u'y',)
(u'o',)
(u'l',)

我在这里已经阅读了很多答案,这似乎是实现这一目标的正确方法。

1 个答案:

答案 0 :(得分:0)

我可以在您的代码中发现以下问题。

  1. cur.executemany不在循环中。
  2. insert查询中只能绑定一个参数。无需使用cur.executemany
  3. 将字符串参数绑定到查询时,应将字符串转换为tuple
  4. 我认为正确的代码可能如下所示 -

    for i in test_run:
        name = (i,)
        print i
        cur.execute("INSERT INTO test1 VALUES(?)", name)
    

    在插入查询后也使用con.commit(),或者在应用程序终止后无法获取插入的行。希望这会有所帮助。