Питон, как надо обозначить переменные?
Карочи, я решил изучить питон, возник следующий вопрос - как обозначить переменные при записывании в базу sqlite3?
Допустим, если загонять в таблицу отдельно строчки, то работает, а я хочу чтоб переменные брались из тела программы:
Работает:
#create table
c.execute('''CREATE TABLE IF NOT EXISTS stolovaja
(den text, menu text)''')
c.execute('''INSERT INTO stolovaja
VALUES('Montag', 'Currywurst mit Pommes und Ketchup.' )''')
не работает:
#create tablec.execute('''CREATE TABLE IF NOT EXISTS stolovaja(den text, menu text)''')c.execute('''INSERT INTO stolovajaVALUES((den), (menu))''')
Я так понимаю нужны f-string: если строка начинается с f перед кавычками, то можно внутри указывать выражения (в фигурных скобках) с переменными тела и Питон будет вставлять значения и оценивать выражение:
my_var1="Montag"
my_var2="Pommes"
c.execute(f" INSERT INTO stolovaja VALUES ( '{my_var1}', '{my_var1}' )" )
БД тут не участвует никак.
не работает:
-----
"не работает" - тоже забудь.
Вместо этого дается полный минимальный контекст, достаточный для воспроизведения, ситуации и описание возникающей проблемы\ошибки.
как обозначить переменные при записывании в базу sqlite3?
-----
Корректный ответ - никак.
В виду того, что переменные в базу не записываются.
База обрабатывает запросы в виде текста на языке SQL.
Вопрос лишь в том как текст запроса формируется. Вариантов - .много.
Корректный ответ - никак.
В виду того, что переменные в базу не записываются.
База обрабатывает запросы в виде текста на языке SQL.
Вопрос лишь в том как текст запроса формируется. Вариантов - .много.
Отвечу по порядку, прежде чем ещё 100500 постов напишите, задачка решена в 3 посте, именно так как я и хотел.
Вопрос заключался как ОФОРМИТЬ переменные, какие скобки, чтобы захватывались и записывались в базу как текст:
tag = 5 + 2
print(tag)
#7
essen = 3 + 2
print(essen)
#5
c.execute(f" INSERT INTO stolovaja VALUES ( '{tag}', '{essen}' )" )
c.execute(f" INSERT INTO stolovaja VALUES ( '{my_var1}', '{my_var1}' )" )
БД тут не участвует никак.
Спасибо за скобки, всё фунциклирует как надо, экспериментирую дальше...
А почему БД не участвует? SQLite - это же встроенная база данных в питоне, в ноутбуке юпитер, мне пообещали 281 терабайт!
Вопрос заключался как
-----
Угу...
Сначала некорректно формулируется вопрос.
Потом запоминается некорректный ответ на некорректный вопрос.
И много времени спустя тратиться много времени и сил на переучивание на то как оно должно быть на самом деле.
Хотя - большинство просто запутывается в большом количестве мелких некорректностей и бросает изучение с утверждением что там все так сложно.
чтобы захватывались и записывались в базу как текст
-----
У тебя две совершенно разные задачи:
- сформировать SQL-строку
- выполнить сформированную строку на сервере.
У тебя будут два совершенно разных набора ошибок возникающих при выполнении этих задач.
Так что для учебы пи ать надо примерно так:
задача 1 - ошибки конкатенации и неправильное формирование строки
field1 = "this is field #1"
field2 = "this is field #2"
sql = f" INSERT INTO stolovaja VALUES (
'{field2}', '{field2}' )"
или
sql = " INSERT INTO stolovaja VALUES ( '" + field2 + "', '" + field2 +"' )"
или
sql = " INSERT INTO stolovaja VALUES ( '"
sql = sql + field2
sql = sql + "', '"
sql = sql + field2
sql = sql +"' )"
или
sql = Stolovaja.GetInsertSQL(field1,field2)
(или еще куча вариантов как получить текст sql-оператора,включая оформление в виде отдельного класса с пропертями и интерфейсом конвертации в строку)
Задача 2 - ошибки выполнения на сервере, ошибки сети и т.п.
c.execute(sql)
Добавлю - формирование sql в основном коде приводит к хорошо перемешанному спагетти - уже после 10-20 килобайт кода начнутся проблемы с внесением изменений.
А чем "плюсики" вокруг переменных лучше чем "F-строки"? В чем разница? Я слепил третий вариант из предложенных:
1 # c.execute(f" INSERT INTO stolovaja VALUES ( '{field1}', '{field2}' )" )
2 # sql = " INSERT INTO stolovaja VALUES ( '" + field2 + "', '" + field2 +"' )"
3 # c.execute("INSERT INTO stolovaja VALUES ( '"+ field1 +"', '"+ field2 +"' )")
****
А так вроде, нормально пока получается, создал базу, ввёл меню:
проверка всей базы:
вытащил меню на четверг:
***
c.execute(строка )
действия то со строкой хочется
Заполненные таблицы в базе ничем не отличаются, что "плюсики" вокруг переменных что "F-строки", обе одинаково выглядят..
Возможно время обработки или ещё чего, но это просто обкатка идеи, а потом может вообще пусть спецы на С++ переписывают)))
Заполненные таблицы в базе ничем не отличаются
ну так именно это из приведенной мною строки и видно.
В базу "попадает" строка, а ка она получается это уже безразлично.
Кстати, если пример не на поиграться, а для дела, то база просто катастрофа.
Мне например, не хочется что одно есть в день.