2017-01-20 2 views
1

私はテーブルに挿入しているタプルのリストを持っています。 各タプルには50の値があります。列名を指定することなく挿入するにはどうすればいいですか??がいくつありますか?MYSQL:col名や疑問符を指定せずに文を挿入するには?

col1は自動インクリメント列ですので、私のinsert stmtはcol2で始まり、col51で終わります。

現在のコード:

l = [(1,2,3,.....),(2,4,6,.....),(4,6,7,.....)...] 

for tup in l: 
    cur.execute(
"""insert into TABLENAME(col2,col3,col4.........col50,col51)) VALUES(?,?,?,.............) 
""") 

がしたい:INSERTのため

insert into TABLENAME(col*) VALUES(*) 
+0

をチェックしないと、私の頭の上からですクエリを構築するためのループ? 2から51までループして 'INSERT INTO tablename'を作成し、各オブジェクトをループして値を送信します。 – Antony

+2

あなたが望むものは不可能です(おそらく、ひどい考えです。テーブル..) – thebjorn

+0

正規化を参照してください – Strawberry

答えて

0

MySQLの構文はここに文書化されている:http://dev.mysql.com/doc/refman/5.7/en/insert.html

あなたが示すようにワイルドカードの構文はありません。最も近いのは列名を省略することです:

INSERT INTO MyTable VALUES (...); 

しかし、私はそうしないことをお勧めします。これは、テーブルの各列(自動インクリメント列を含む)の値を指定することが確実で、値が表の列と同じ順序になることが保証されている場合にのみ機能します。

アプリケーション内の値の配列に基づいてSQLクエリを作成するコードを使用する方法を学ぶ必要があります。ここで私がやる方法はPythonの例です。 列の値がdata_valuesという値を持つとします。

placeholders = ['%s'] * len(data_values) 
sql_template = """ 
INSERT INTO MyTable ({columns}) VALUES ({placeholders}) 
""" 
sql = sql_template.format(
    columns=','.join(keys(data_values)), 
    placeholders=','.join(placeholders) 
) 
cur = db.cursor() 
cur.execute(sql, data_values) 
0

あなたのコードの前に置くためのコード例:

cols = "(" 
for x in xrange(2, 52): 
    cols = cols + "col" + str(x) + "," 

test = test[:-1]+")" 

あなたのループ内

for tup in l: 
    cur.execute(
"""insert into TABLENAME " + cols " VALUES {0}".format(tup) 
""") 

これは、エラーが使用していないのはなぜ

関連する問題