当前位置:  开发笔记 > 编程语言 > 正文

Python和SQLite:插入表中

如何解决《Python和SQLite:插入表中》经验,为你挑选了4个好方法。

我有一个列表,每行有3行代表一个表行:

>>> 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> 小智..:

有一个更好的方法

# 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()



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


谢谢Dyno和Dominic-但这不起作用-这是我正在尝试的-----------记录在列表中:打印“ --->”,记录cursor.execute(“插入到进程中值(?,?,?)“,记录); -----------出错
除非我们使用conn.commit(),否则它不会插入

3> stil..:

不是直接的答案,但这里是一个函数,用于将具有列值对的行插入到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})

请注意,应事先验证表名和列名.



4> Dyno Fu..:

改编自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)

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有