我有一个大小为 360x120 的 csv 文件,我想将其逐行导入到我的 sqlite 数据库中。对于一行,我知道如果 mytuple
有 2 个元素,则以下语法有效:
import sqlite3
conn = sqlite3.connect(dbLoc)
cur = conn.cursor()
mytuple = (a, b, c, ...) #some long tuple of 120 elements
cur.execute('INSERT INTO tablename VALUES (?, ?)', mytuple)
问题是,我的行包含 120 列,而且我无法真正在 cur.execute()
行中输入 120 个问号。事实上我有,它有效,但是,这不是一个好的解决方案。我尝试过的一件事是:
cur.execute('INSERT INTO tablename VALUES ?', mytuple)
以为它只会执行 ?=mytuple
并将 ?
替换为 mytuple
但它并没有这样做。用户对文章 sebastianraschka.com/Articles/2014_sqlite_in_python_tutorial.html
的评论显示了这样的语法,这对我有用,但事实并非如此:
t = ('RHAT',)
c.execute('SELECT * FROM stocks WHERE symbol=?', t)
如此处所示,他能够使用单个 ?
将元组替换为执行字符串。如何使用 INSERT INTO tablename
实现相同的效果?
最佳答案
sqlite3
不支持更简洁的语法:
c.execute('INSERT INTO tablename VALUES ({}?)'.format('?,'*(len(t) - 1)), t)
注意:默认的 SQLITE_MAX_COLUMN
为 2000
。 SQLite 中的某些算法的列数是 O(n**2)
,也就是说,如果增加限制;它可能会减慢数据库操作。
关于python - 使用 python sqlite3 将行插入 sqlite 数据库的简要语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32550049/