2016-08-11 12 views
0

executemanyは動作しないようです。私は何の誤りもなかった。しかし値も挿入されていません。以下は小さな例です:テーブル価格にはすでにいくつかの列と3行があります。私は、新しい列tを追加し、tvalsの値を挿入します。Pythonでsqlite3の列に値のリストを挿入するには?

vals = [(1,), (2,), (3,)] 
cursor.execute("ALTER TABLE prices ADD COLUMN t REAL") 
cursor.executemany("INSERT INTO TABLE prices(t) VALUES(?)", vals) 
data = cursor.execute("SELECT id, t FROM prices") 

for i in data: 
    print i 

私はそれはあなたがあなたのテーブルが2列(ID、T) チェックを持っていると仮定しt'.i'm」列に値を挿入しているように見えるdoes't

(1, None) 
(2, None) 
(3, None) 
+0

をスピードアップしたいと思いますけれども 。エラーを示す短い**完全な**プログラムをコピーして貼り付けてください。詳細については、[mcve]を参照してください。 –

+0

構文エラーを修正し、適切なラッパーコードを追加すると、結果を再現できません。完全に動作するコードについては、[ここ](http://ideone.com/vmVw0s)を参照してください。 –

答えて

0

を取得あなたのリストには、

vals = [(1,), (2,), (3,)] 

があります。もう少し詳しく説明できますか?

+0

実際、私のテーブルには2つ以上のカラムがあります。列 '' 't''は最後に追加された列です。私は私のポストでこれを述べました。 – tnabdb

0

あなたが実際に成功し、テーブルに値を挿入しました。問題は、それらが下部に新しい行であることです。あなたはすべてをフェッチするならば、あなたは (COL1、COL2、...、なし) を持っています。 。 。 (なし、なし、...、1)

INSERT INTOコマンドは、行を追加するためです。彼はテーブル内の既存の列を持っていなかったので、ロブの例

で働いていました。

あなたはWHERE句で更新する必要があります。これが遅いと私はinsert` `のためのあなたの構文が正しくないと思わ

add_col_str = "ALTER TABLE orig ADD COLUMN {} INT".format(col_name) 
db.execute(add_col_str) 

for i in range(len(df)): 
    add_data_str = "UPDATE orig SET {} =(?) WHERE orig_id=(?)".format(col_name) 
    value = int(df.values[i]) 
    idx = df.index[i] 
    db.execute(add_data_str, (value, idx)) 
# commit 
db.commit() 
関連する問題