Используя Python, быстро вставьте много столбцов в Sqlite \ Mysql - PullRequest
2 голосов
/ 17 сентября 2010

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

csr = con.cursor()
csr.execute('Truncate table test.data')
csr.executemany('INSERT INTO test.data VALUES (?,?,?,?)', Newdata)
con.commit()

Ответы [ 2 ]

3 голосов
/ 17 сентября 2010

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

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

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

затемвставьте его в остальную часть оператора SQL.Способ @ Nathan для вставки подходит для большинства версий Python 2.any, но если у вас версия 2.6 или выше,

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

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

Наконец,

csr.executemany(sql, Newdata)

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

0 голосов
/ 17 сентября 2010

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

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

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

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

sql = "INSERT INTO test.data VALUES (% s)"% ",". Join ('?' * Num_columns)

...