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、必要なすべての情報を集めてから 1 つの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 に答える