Python SQLlite3 выполняет команду, не записывая значения

#python #sqlite #python-3.x

#python #sqlite #python-3.x

Вопрос:

Когда я пытаюсь запустить программу, она выдает ошибку

 Traceback (most recent call last):
  File "G:documentsGCSEComputingPython FilesDatabasesDatabase 1.py", line 15, in <module>
cursor.execute('''INSERT INTO Orders VALUES (first_name,last_name,number,date,order_value)''')
sqlite3.OperationalError: no such column: first_name
  

Код выглядит следующим образом, любая помощь, которая может быть предоставлена, была бы оценена;D

 cursor.execute('''CREATE TABLE Orders4 (customer_first_name text,customer_second_name text,order_number text,order_date date,order_contents text)''')
first_name = input("What is the customer's first name: ")
last_name = input("What is the customer's last name: ")
number = input("What is the order number: ")
order_value = input("What is the order: ")
date = time.strftime("%d/%m/%Y")
cursor.execute('''INSERT INTO Orders VALUES(first_name,last_name,number,date,order_value)''')
  

Комментарии:

1. Вы вызываете таблицу Orders4 при ее создании, затем пытаетесь ссылаться на нее как Orders

Ответ №1:

Как упоминалось в комментариях, в ваших SQL-операторах есть опечатка (Orders против Orders4).
Реальная проблема, однако, заключается в строке, в которой вы определяете свою INSERT команду (последняя строка). Если вы хотите, чтобы переменные first_name , last_name и т.д. Были оценены (т. Е. Их фактические значения, заканчивающиеся в строке), вы должны отформатировать строку соответствующим образом. В настоящее время они представляют собой простые строки.

Когда база данных выполняет INSERT команду, она видит слово first_name и оценивает его как ссылку на столбец «first_name», который не существует.

Если бы вы заключили переменные в кавычки следующим образом

 cursor.execute('''INSERT INTO Orders VALUES("first_name","last_name","number","date","order_value")''')
  

команда сработала бы, но в итоге вы получили бы фактические слова «first_name» в строке вашей базы данных.

Прочитайте о форматировании строки по ссылке выше и попробуйте следующее

 cursor.execute('''INSERT INTO Orders VALUES({fn},{ln},{nr},{dt},{ov})'''.format(fn=first_name,ln=last_name,nr=number,dt=date,ov=over_value))
  

привет, Денис