Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Питон, как надо обозначить переменные?

1168  
7495 старожил26.03.23 06:05
7495
26.03.23 06:05 

Карочи, я решил изучить питон, возник следующий вопрос - как обозначить переменные при записывании в базу 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 table
c.execute('''CREATE TABLE IF NOT EXISTS stolovaja
(den text, menu text)''')

c.execute('''INSERT INTO stolovaja
VALUES((den), (menu))''')
Вопросы и Ответы - Программируем калькулятор пособий для беженцев вместе.
#1 
AlexNek патриот26.03.23 11:45
AlexNek
NEW 26.03.23 11:45 
в ответ 7495 26.03.23 06:05
переменные брались из тела программы:

Как это?


Какая структура таблицы stolovaja?

#2 
Бесконечный цикл завсегдатай26.03.23 12:18
NEW 26.03.23 12:18 
в ответ 7495 26.03.23 06:05

Я так понимаю нужны f-string: если строка начинается с f перед кавычками, то можно внутри указывать выражения (в фигурных скобках) с переменными тела и Питон будет вставлять значения и оценивать выражение:


my_var1="Montag"

my_var2="Pommes"

c.execute(f" INSERT INTO stolovaja VALUES ( '{my_var1}', '{my_var1}' )" )


БД тут не участвует никак.

#3 
Murr патриот26.03.23 12:53
Murr
NEW 26.03.23 12:53 
в ответ 7495 26.03.23 06:05

а я хочу чтоб

-----

Забудь эту последовательность слово.. Есть только "как сделать вот этакое"...


П.С. Наконец-то делом занялся... спок

#4 
Murr патриот26.03.23 13:03
Murr
NEW 26.03.23 13:03 
в ответ 7495 26.03.23 06:05

не работает:

-----

"не работает" - тоже забудь.

Вместо этого дается полный минимальный контекст, достаточный для воспроизведения, ситуации и описание возникающей проблемы\ошибки.


как обозначить переменные при записывании в базу sqlite3?

-----

Корректный ответ - никак.

В виду того, что переменные в базу не записываются.

База обрабатывает запросы в виде текста на языке SQL.

Вопрос лишь в том как текст запроса формируется. Вариантов - .много.

#5 
7495 старожил26.03.23 13:38
7495
NEW 26.03.23 13:38 
в ответ Murr 26.03.23 13:03

Корректный ответ - никак.

В виду того, что переменные в базу не записываются.

База обрабатывает запросы в виде текста на языке SQL.

Вопрос лишь в том как текст запроса формируется. Вариантов - .много.



Отвечу по порядку, прежде чем ещё 100500 постов напишите, задачка решена в 3 посте, именно так как я и хотел. glass


Вопрос заключался как ОФОРМИТЬ переменные, какие скобки, чтобы захватывались и записывались в базу как текст:


tag = 5 + 2

print(tag)

#7

essen = 3 + 2

print(essen)

#5

c.execute(f" INSERT INTO stolovaja VALUES ( '{tag}', '{essen}' )" )

Вопросы и Ответы - Программируем калькулятор пособий для беженцев вместе.
#6 
7495 старожил26.03.23 13:40
7495
NEW 26.03.23 13:40 
в ответ Бесконечный цикл 26.03.23 12:18

c.execute(f" INSERT INTO stolovaja VALUES ( '{my_var1}', '{my_var1}' )" )


БД тут не участвует никак.


Спасибо за скобки, всё фунциклирует как надо, экспериментирую дальше...


А почему БД не участвует? SQLite - это же встроенная база данных в питоне, в ноутбуке юпитер, мне пообещали 281 терабайт!

Вопросы и Ответы - Программируем калькулятор пособий для беженцев вместе.
#7 
alex445 коренной житель26.03.23 15:02
NEW 26.03.23 15:02 
в ответ 7495 26.03.23 06:05
Карочи, я решил изучить питон

Так джаваскрипт же ещё недавно был?

#8 
AlexNek патриот26.03.23 16:45
AlexNek
NEW 26.03.23 16:45 
в ответ 7495 26.03.23 13:40
А почему БД не участвует?

c.execute(строка )

действия то со строкой хочется

#9 
Murr патриот26.03.23 16:48
Murr
NEW 26.03.23 16:48 
в ответ 7495 26.03.23 13:38

Вопрос заключался как

-----

Угу...

Сначала некорректно формулируется вопрос.

Потом запоминается некорректный ответ на некорректный вопрос.

И много времени спустя тратиться много времени и сил на переучивание на то как оно должно быть на самом деле.

Хотя - большинство просто запутывается в большом количестве мелких некорректностей и бросает изучение с утверждением что там все так сложно.


чтобы захватывались и записывались в базу как текст

-----

У тебя две совершенно разные задачи:

- сформировать 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 килобайт кода начнутся проблемы с внесением изменений.


#10 
7495 старожил27.03.23 03:10
7495
NEW 27.03.23 03:10 
в ответ Murr 26.03.23 16:48

А чем "плюсики" вокруг переменных лучше чем "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 +"' )")

****


А так вроде, нормально пока получается, создал базу, ввёл меню:



проверка всей базы:



вытащил меню на четверг:



***

Вопросы и Ответы - Программируем калькулятор пособий для беженцев вместе.
#11 
7495 старожил27.03.23 03:20
7495
NEW 27.03.23 03:20 
в ответ AlexNek 26.03.23 16:45

c.execute(строка )

действия то со строкой хочется


Заполненные таблицы в базе ничем не отличаются, что "плюсики" вокруг переменных что "F-строки", обе одинаково выглядят..

Возможно время обработки или ещё чего, но это просто обкатка идеи, а потом может вообще пусть спецы на С++ переписывают)))

Вопросы и Ответы - Программируем калькулятор пособий для беженцев вместе.
#12 
Murr патриот27.03.23 04:22
Murr
NEW 27.03.23 04:22 
в ответ 7495 27.03.23 03:10

В чем разница?

------

Поймешь потом, когда будешь переделывать.

#13 
AlexNek патриот27.03.23 21:07
AlexNek
NEW 27.03.23 21:07 
в ответ 7495 27.03.23 03:20
Заполненные таблицы в базе ничем не отличаются

ну так именно это из приведенной мною строки и видно.

В базу "попадает" строка, а ка она получается это уже безразлично.


Кстати, если пример не на поиграться, а для дела, то база просто катастрофа.

Мне например, не хочется что одно есть в день.

#14