2010-01-19 80 views
37

我有了每一个代表一个表行3列的列表:Python和SQLite的:插入到表

>>> print list 
[laks,444,M] 
[kam,445,M] 
[kam,445,M] 

如何插入这个名单到表?

我的表结构是:

 
tablename(name varchar[100], age int, sex char[1]) 

或者我应该使用比列表中的其他东西吗?

下面是实际的代码部分:

for record in self.server: 
     print "--->",record 
     t=record 
     self.cursor.execute("insert into server(server) values (?)",(t[0],)); 
     self.cursor.execute("insert into server(id) values (?)",(t[1],)) 
     self.cursor.execute("insert into server(status) values (?)",(t[2],)); 

插入三个字段分别工作,但使用单个线像

self.cursor.execute("insert into server(server,c_id,status) values (?,?,?)",(t[0],),(t[1],),(t[2],))

self.cursor.execute("insert into server(server,c_id,status) values (?,?,?)",(t),)

才不是。

+1

现在已经修好了。 我使用了这个错误的方法 self.cursor.execute(“insert into server(server,c_id,status)values(?,?,?)”,(t [0],),(t [1],) ,(t [2],)) 正确的方法是 self.cursor.execute(“插入到服务器(服务器,c_id,状态)值(?,?,?)”,(t [0],t [ 1],t [2],)) – 2010-01-25 06:49:47

回答

29
conn = sqlite3.connect('/path/to/your/sqlite_file.db') 
c = conn.cursor() 
for item in my_list: 
    c.execute('insert into tablename values (?,?,?)', item) 
+0

感谢Dyno和Dominic - 但它不工作 - 这就是我想要的 ----------- \t记录在列表中: \t print “--->”,记录 \t cursor.execute(“insert into process values(?,?,?)”,record); ----------- 获取错误 – 2010-01-19 11:59:47

+0

@lakshmipathi - 你会得到什么错误? – 2010-01-19 12:18:37

+0

我有尝试,除了部分 - 尝试部分将有循环和执行stmt和除​​了部分有单个消息说“插入失败”...它只是从除了部分打印消息并退出。 如何更有效地进行调试? – 2010-01-19 12:47:23

8

http://docs.python.org/library/sqlite3.html改编:

# Larger example 
for t in [('2006-03-28', 'BUY', 'IBM', 1000, 45.00), 
      ('2006-04-05', 'BUY', 'MSOFT', 1000, 72.00), 
      ('2006-04-06', 'SELL', 'IBM', 500, 53.00), 
     ]: 
    c.execute('insert into stocks values (?,?,?,?,?)', t) 
62

有一个更好的办法

# Larger example 
rows = [('2006-03-28', 'BUY', 'IBM', 1000, 45.00), 
     ('2006-04-05', 'BUY', 'MSOFT', 1000, 72.00), 
     ('2006-04-06', 'SELL', 'IBM', 500, 53.00)] 
c.executemany('insert into stocks values (?,?,?,?,?)', rows) 
connection.commit() 
+0

我有一个查询,因为我已经尝试它但我得到和错误说我有6列,只提供了5的信息。这是真的,但第一列是pk整数,你不需要提供一个值。有没有办法超过这个? - – Mike 2017-02-14 17:37:07

+0

想通了。像通常一样,只需在数据库名称后添加字段标题即可。 – Mike 2017-02-14 17:59:25

7

不是一个直接的答案,但这里是插入与列值对的sqlite的一排功能表:

def sqlite_insert(conn, table, row): 
    cols = ', '.join('"{}"'.format(col) for col in row.keys()) 
    vals = ', '.join(':{}'.format(col) for col in row.keys()) 
    sql = 'INSERT INTO "{0}" ({1}) VALUES ({2})'.format(table, cols, vals) 
    conn.cursor().execute(sql, row) 
    conn.commit() 

使用示例:

sqlite_insert(conn, 'stocks', { 
     'created_at': '2016-04-17', 
     'type': 'BUY', 
     'amount': 500, 
     'price': 45.00}) 

请注意,表名和列名应事先进行验证。