Создание базы данных из таблицы Excel с использованием sqlite, OperationalError: near "Android": синтаксическая ошибка - PullRequest
1 голос
/ 14 января 2020

Я получаю сообщение об ошибке OperationalError: near "Android": синтаксическая ошибка, и я не уверен, почему в примерах этого класса до сих пор использовался этот метод для l oop и format () без упоминания этого типа ошибки, и я заблудился относительно того, как это исправить и создать свою базу данных для списка кортежей

import openpyxl
import sqlite3
connection = sqlite3.connect("test1.db")
cursor = connection.cursor()
wb = openpyxl.load_workbook('items.xlsx')
sheet=wb['20190928-items']
savedata=[]
lseg=[] #a list of each rows contents
x=sheet.max_row
y=sheet.max_column
for i in range(1, x+1):
    for j in range(1, y+1):
        av=(sheet.cell(row=i, column=j).value)
        lseg.append(av)

    savedata.append(tuple(lseg))
    lseg=[]

sql_command = """
CREATE TABLE item ( 
asin CHAR(10) PRIMARY KEY, 
brand VARCHAR(20), 
title VARCHAR(30), 
url VARCHAR(80),
image VARCHAR(255),
rating float(1),
reviewUrl VARCHAR(80),
totalreviews int(100),
prices float(2));"""

cursor.execute(sql_command)

for p in savedata:
    format_str = """INSERT INTO item (asin, brand, title, url, image, rating, reviewUrl, totalreviews, prices)
    VALUES ("{asin}", "{brand}", "{title}", "{url}", "{image}", "{rating}", "{reviewUrl}", "{totalreviews}", "{prices}");"""

    sql_command = format_str.format(asin=p[0], brand=p[1], title=p[2], url=p[3], image=p[4], rating=p[5], reviewUrl=p[6], totalreviews=p[7], prices=p[8])
    cursor.execute(sql_command)

connection.commit()
connection.close()

1 Ответ

1 голос
/ 14 января 2020

Значения должны быть в одинарных, а не в двойных кавычках.

Заменить

 VALUES ("{asin}", "{brand}", "{title}", "{url}", "{image}", "{rating}", "{reviewUrl}", "{totalreviews}", "{prices}");

на

 VALUES ('{asin}', '{brand}', '{title}', '{url}', '{image}', '{rating}', '{reviewUrl}', '{totalreviews}', '{prices}');

РЕДАКТИРОВАТЬ:

Более того еще лучшей альтернативой было бы отказаться от кавычек и позволить библиотеке обрабатывать их для вас (значения частично опущены):

format_str = """INSERT INTO item (asin, brand)
    VALUES (?, ?);"""
    cursor.execute(sql_command, (p[0], p[1]))

https://docs.python.org/3.5/library/sqlite3.html#sqlite3 .Cursor.execute

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...