0

所以我能够在我的数据库中创建一个新表并从文件中收集所有信息,以使用游标填充表中除了最后一列之外的所有信息,并像往常一样执行。

最后一列信息来自不同的来源,在我的代码中作为整数列表。我将如何将这个整数列表添加到我的最后一列?

我已经尝试了各种循环和迭代,但我只是在如何正确表达它方面遗漏了一些东西(可能很明显)。

connection = sqlite3.connect('database.db')
cursor = connection.cursor()
for j in list:
    cursor.execute('insert into Table (column) values (?)', j)
connection.commit()

我收到以下错误:

Traceback (most recent call last):
  File "Homework/Homework7/bam_counting.py", line 157, in <module>
    cursor.execute('insert into Genes (counts) values (?)', j)
ValueError: parameters are of unsupported type
4

2 回答 2

6

如果你使用INSERT INTO...,那么 sqlite 将创建一个新行。您必须使用UPDATE table ...来更新已经存在的行。

您需要告诉 sqlite 将新列值添加到哪一行。通常,您会使用类似的 SQL 语句来执行此操作

UPDATE Table SET column = ? WHERE column2 = ?

column2表中的其他列在哪里。

所以这样的事情很慢但可能:

cursor.execute('SELECT column2 FROM Table ORDER BY column2')
column2 = [row[0] for row in cursor]
for j, c in zip(lst, column2):
    cursor.execute('UPDATE Table SET column = ? WHERE column2 = ?', [j, c])

一个更好的解决方案(如果可能的话)是推迟INSERT进入表格,直到你收集了所有需要的信息,然后做一个INSERT.


PS。如果您重新安排程序以收集所有要插入到行列表中的数据args,那么您可以调用

cursor.executemany('INSERT INTO ...', args)

这将比许多调用更快cursor.execute

于 2012-11-12T19:57:19.183 回答
0

使用Python CentralINSERT INTO提供的完整示例:

# Import the SQLite3 module
import sqlite3
db = sqlite3.connect(':memory:')
c = db.cursor()
c.execute('''CREATE TABLE users(id INTEGER PRIMARY KEY, name TEXT, phone TEXT)''')
users = [
    ('John', '5557241'), 
    ('Adam', '5547874'), 
    ('Jack', '5484522'), 
    ('Monthy',' 6656565')
]

c.executemany('''INSERT INTO users(name, phone) VALUES(?,?)''', users)
db.commit()

# Print the users
c.execute('''SELECT * FROM users''')
for row in c:
    print(row)

db.close()

另请参阅是否可以在 SQLite 数据库中一次插入多行?

于 2016-10-25T00:49:38.073 回答