sqlite3 INSERT INTO завершается ошибкой, если значения являются объектом 'itertools.chain' - PullRequest
0 голосов
/ 03 марта 2019

Я новичок в sqlite3 (пользователь python)

Уже сохраненные данные в базе данных, основанные на методе ниже, но на этот раз не работающие.INSERT INTO выполнен, нет отчета об ошибке, но ничего не хранится в БД.

Я много раз искал эту тему на этом сайте, сосредоточившись на «без коммита».Но я почти уверен, что закончил «коммит» и закрыл файл правильно.После действия INSERT я мог найти в своей базе данных таблицу f65 с заголовком (именем столбца), но больше никаких данных.(10 столбцов x 4 тыс. Строк).

Фрагмент кода ключа, как показано ниже.

df = pd.DataFrame(pd.read_excel(r'/Users/' + username + r'/Documents/working/addf6-5.xlsx', header=0))
df = df.replace('#NUM!', '')

value = chain(reversed(grouplist2), df.values.tolist())
for x in value:
    x[4] = str(x[4])
    x[7] = str(x[7])

conn = sqlite3.connect('veradb.db')
c = conn.cursor()
c.execute("DROP TABLE IF EXISTS f65")
conn.commit()
c.close()
conn.close()

conn = sqlite3.connect('veradb.db')
c = conn.cursor()
c.execute("CREATE TABLE IF NOT EXISTS f65 ('offer', 'code', 'desc', 'engine', 'cost', 'supplier', 'remark', 'podate', 'empty', 'border')")
c.executemany("INSERT INTO f65 VALUES (?,?,?,?,?,?,?,?,?,?)", value)
conn.commit()
c.close()
conn.close()

Дополнительные сведения для пояснения: данные кэша находятся в addf6-5, я получил новые данные в grouplist2 (этосписок) и использовал chain(reversed(grouplist2), df.values.tolist()) для объединения данных.

Почему использовали

for x in value:
    x[4] = str(x[4])
    x[7] = str(x[7])

Поскольку мой отчет Pycharm "Ошибка параметра привязки 4 - возможно, неподдерживаемый тип." & "Параметр привязки ошибки 7- вероятно, неподдерживаемый тип. "Поэтому я снова делаю STR, хотя они должны быть по умолчанию в соответствии с SQLite.

Я попытался проверить «значение» с помощью

for x in value:
    x[4] = str(x[4])
    x[7] = str(x[7])
    print(x)

и обнаружил, что они могут быть напечатаны правильно.значение (списки) было правильным?

Некоторые люди могут сомневаться, пропустил ли атрибут в предложении «CREATE TABLE», я могу сказать, что Sqlite при условии, что по умолчанию TEXT не печатает, и я выполняю эти коды в других файлах и работаю.

Ждем вашей помощи.Заранее спасибо.

...