Использование Python Quick Вставьте много столбцов в SQLite mysql
-
03-10-2019 - |
Вопрос
Если 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)