Использование Python Quick Вставьте много столбцов в SQLite mysql

StackOverflow https://stackoverflow.com/questions/3732490

Вопрос

Если NewData - это список столбцов X, как бы получить цифровые столбцы - количество членов первого кортежа. (Лен не важен.) Измените количество "?" Чтобы сопоставить столбцы и вставить с помощью оператора ниже.

csr = con.cursor()
csr.execute('Truncate table test.data')
csr.executemany('INSERT INTO test.data VALUES (?,?,?,?)', Newdata)
con.commit()
Это было полезно?

Решение

«NewData это список столбцов X», я думаю, что вы имеете в виду x кортежи, С тех пор вы продолжаете говорить о «первом кортеже». Если Newdata это список кортежей, y = len(Newdata[0]) это количество предметов в первом из тех кортежей.

Предполагая, что это число, которое вы хотите (и все кортежи лучше имеют одинаковое количество предметов, в противном случае executemany буду Не удалось!), Общая идея в ответе @ Натана является правым: построить строку с соответствующим количеством вопросительных знаков, разделенных запятыми:

holders = ','.join('?' * y)

Затем вставьте его в остальную часть оператора SQL. @ Путь Натана вставить прямо для большинства версий Python 2.Any, но если у вас есть 2,6 или лучше,

sql = 'INSERT INTO testdata VALUES({0})'.format(holders)

в настоящее время предпочтительнее (он также работает в Python 3.Any).

Ну наконец то,

csr.executemany(sql, Newdata)

сделаю то, что вы желаете. Не забудьте совершить транзакцию, как только вы закончите! -)

Другие советы

Если вы ищете максимальное количество предметов во всех элементах в Newdata, Это просто:

num_columns = max(len(t) for t in Newdata)

Это, конечно, предполагает Python 2.5 или больше.

Не то чтобы я уверен, что вы пытаетесь работать, но оператор вставки стал бы:

SQL = "Вставьте в Test.data значения (% s)"% ",". Присоединяйтесь ('?' * num_columns)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top