2017-01-20 2 views
1

У меня есть список кортежей, которые я вставляю в таблицу. Каждый кортеж имеет 50 значений. Как мне вставить без указания имен столбцов и количества ??MYSQL: как вставить оператор без указания имен столбцов или вопросительных знаков?

col1 - колонка с автоматическим приращением, поэтому моя вставка 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 into TABLENAME(col*) VALUES(*) 
+0

Почему не используется цикл для создания запроса? Loop от 2 до 51, чтобы создать «INSERT INTO tablename», затем прокрутите каждый объект, чтобы отправить значения. – Antony

+2

. Что вы хотите, невозможно (возможно, потому что это ужасная идея - подумайте о том, что произойдет, если кто-то вставит столбец в таблица ..) – thebjorn

+0

См. нормализацию – Strawberry

ответ

0

синтаксиса MySQL для INSERT документирован здесь: 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) 
""") 

Это от верхней части головы моей не проверяя никаких ошибок

Смежные вопросы