2 Вопрос: вставка данных в таблицу с помощью pyodbc

вопрос создан в Wed, May 8, 2019 12:00 AM

я пытаюсь вставить данные, используя python (pyodbc), в свою базу данных, но я продолжаю получать ошибки, такие как пропущенная запятая и другие

я пытался использовать переменную "linea" вместо всех значений, но не работает

for linea in nintendo:
        if(linea[0]!='id'):
            print(linea)
            cursor.execute("INSERT INTO Nintendo (juegoid,nombrejuego,generos,desarrolladores,publicadoras,fechapublicacion,exclusividad,ventasglobales,rating) VALUES (linea[0],linea[1],linea[2],linea[3],linea[4],linea[5],linea[6],linea[7],linea[8]);")
            print("data loaded")

это содержит "linea":

['1', '#Breakforcist Battle', 'Party', 'Lucid Sheep Games', 'Lucid Sheep Games', '12 апреля 2018 года', 'No', '', '']

    
- 1
2 ответа                              2                         

Вы пропустили ключевое слово Values ​​

INSERT INTO Nintendo **Values** (juegoid,nombrejuego,generos,desarrolladores,publicadoras,fechapublicacion,exclusividad,ventasglobales,rating) VALUES (linea[0],linea[1],linea[2],linea[3],linea[4],linea[5],linea[6],linea[7],linea[8]);

Также вы должны зафиксировать данные с помощью cursor.commit

    
0
2019-05-08 16: 04: 33Z
  1. Значения содержится в исходном операторе SQL OP.
    2019-05-08 16: 07: 24Z
  2. извинения .. не увидел его полностью.
    2019-05-08 16: 09: 21Z

Как правило, в Python вы не можете интерполировать переменные, такие как список значений напрямую , внутри строки. Вы должны использовать какой-либо метод форматирования строки, включая % оператор по модулю (не рекомендуется использовать), str.format() или даже более новый F-string в версии 3.6 +.

В частности, в DB-API вы должны параметризировать запросы, в которых переменные связаны с местозаполнителями при вызове cursor.execute:

# PREPARED STATEMENT (NO DATA)
sql = """INSERT INTO Nintendo (juegoid, nombrejuego, generos, desarrolladores, publicadoras,
                              fechapublicacion, exclusividad, ventasglobales, rating)
         VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)"""

# BIND PARAMS
cursor.execute(sql, params=linea[0:8])
conn.commit()

print("data loaded")
    
0
2019-05-08 16: 05: 27Z
  1. Я попробовал метод str.format string = "INSERT INTO Nintendo (juegoid,nombrejuego,generos,desarrolladores,publicadoras,fechapublicacion,exclusividad,ventasglobales,rating) VALUES ({},{},{},{},{},{},{},{},{});" sql=string.format(linea[0],linea[1],linea[2],linea[3],linea[4],linea[5],linea[6],linea[7],linea[8]) cursor.execute(sql), теперь я получаю ошибку ORA-00911
    2019-05-10 01: 03: 41Z
  2. Почему вы не параметризуетесь? Избегайте интерполяции строк в SQL. Ваша текущая попытка не включает кавычки для строковых столбцов, которых можно избежать с помощью параметров. Посоветуйте, пожалуйста, почему мое решение не сработало. Опубликовать полную ошибку.
    2019-05-10 13: 04: 06Z
источник размещен Вот