@stevenmackson

Работа с переменными в sqlite3?

Не работает переменная (de) как сделать так чтобы у меня отнималось нужное мне количество денег от cash?
Вот код:
import sqlite3

global db
global sql
db = sqlite3.connect('serversi.db')
sql = db.cursor()

sql.execute("""CREATE TABLE IF NOT EXISTS users (
	cash INT
)""")
db.commit()
def casino():
	number = input("Сколько грамм:")
	if number == '40':
		print('Ваш баланс повышен на 40')
		sql.execute('UPDATE users SET cash = cash + 40')
		db.commit()
	elif number == '100':
		print("Ваш баланс повышен на 100")
		sql.execute('UPDATE users SET cash = cash + 100')
		db.commit()
	elif number == 'del':
		de = input("Сколько снять:")
		sql.execute('UPDATE users SET cash = cash - de ')
		db.commit()

def enter():
	for i in sql.execute('SELECT cash FROM users'):
		print(i)
def main():
	casino()
	enter()
main()

Что выводиться:
d:\python>pdf.py
Сколько грамм:del
Сколько снять:20
Traceback (most recent call last):
File "D:\python\pdf.py", line 33, in
main()
File "D:\python\pdf.py", line 31, in main
casino()
File "D:\python\pdf.py", line 24, in casino
sql.execute('UPDATE users SET cash = cash - de ')
sqlite3.OperationalError: no such column: de

d:\python>
  • Вопрос задан
  • 2139 просмотров
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
Потому что если просто написанть название переменной в SQL запросе, sqlite не догадается магически что это именно переменная, и что её надо взять именно из этого места скрипта. И слава богу что так.

Для решения таких задач есть placeholders, это просто и надёжно. На странице по ссылке почти в самом начале есть пример, начинается с фразы "# Do this instead". Почитай и сделай по аналогии.

Если коротко, вместо каждой подставляемой переменной в запросе ставишь ?, а после текста запроса пишешь кортеж, где перечисляешь сами эти переменные - строго в том же порядке.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы