Я пытаюсь создать базу данных для простой игры, которую я создаю, и имею проблему с запросом на статистику игроков. Пока можно искать и обновлять базу данных, но только путем изменения фактического кода можно изменить условия поиска.Как использовать параметры SQL
Весь код до сих пор (извинения за любые ошибки отступа):
# Importing modules
import sqlite3
# Creating database
base_db = sqlite3.connect("D:\\FILEPATH\\base_db")
# Creating cursor object
global cur
cur = base_db.cursor()
# Creating players table with username etc. attributes
cur.execute("""
CREATE TABLE IF NOT EXISTS players
(username, password, score)
""")
base_db.commit()
# Inserts some example data
def populate_db():
print("Populating database")
example_data = [("John Smith", "Password", 10)]
cur.executemany("""
INSERT INTO players
VALUES (?, ?, ?)""",
example_data)
base_db.commit()
# Clears database
def clear_db():
print("Clearing database")
command = ("""
DELETE FROM players
""")
cur.execute(command)
base_db.commit()
# Function that (only) updates the database
def update_db(mode, name):
if mode is "score":
print("Updating scores")
print("Finding", name)
command = ("""
UPDATE players
SET score = '0'
WHERE username = 'John Smith'
""")
cur.execute(command)
base_db.commit()
# Function that (only) retrieves data from the database
def retrieve_db(mode, name):
# Returns value of player's score
if mode is "score":
print("Retrieving scores")
print("Finding", name)
command = ("""
SELECT score FROM players
WHERE username = 'John Smith'
""")
return cur.execute(command).fetchone()[0]
# Returns tuple of username and password
elif mode is "login":
print("Retrieving login details")
print("Finding", name)
command = ("""
SELECT username, password FROM players
WHERE username = 'John Smith'
""")
return cur.execute(command).fetchone()[0:2]
base_db.commit()
# Testing results
populate_db()
print(retrieve_db("score", "John Smith")) # Expected result is 10
print(retrieve_db("login", "John Smith")) # Expected result is ('John Smith, 'Password')
clear_db()
И раздел Я пытаюсь получить решение:
# Function that (only) retrieves data from the database
def retrieve_db(mode, name):
# Returns value of player's score
if mode is "score":
print("Retrieving scores")
print("Finding", name)
command = ("""
SELECT score FROM players
WHERE username = 'John Smith'
""")
return cur.execute(command).fetchone()[0]
Вместо того, где имя пользователя = ' John Smith ', я бы хотел, чтобы вместо этого вместо параметра name в эту команду было принято решение, так что независимо от параметра name этот термин будет искать.
Я нашел аналогичный пример здесь (Searching SQLite Database with Python Variables), но я зациклился на том, как реализовать (?), (Переменную) идею в этот блок кода.
То, что я пытался до сих пор:
command = ("""
SELECT score FROM players
WHERE username = VALUES (?)""", name)
command = ("""
SELECT score FROM players
WHERE username VALUES (?)""", name)
Любая помощь вы могли бы дать очень высокую оценку. Заранее спасибо.
Для дальнейшего использования окончательного рабочего варианта я получил:
command = ("""
SELECT score FROM players
WHERE username = ?
""")
return cur.execute(command, name).fetchone()[0]
Если имя было поставлено как [ «John Smith»], когда функция была вызвана.
Вы уже используете параметры в 'populate_db'. В чем проблема? –
В этой функции он просто вставляет значения во все поля без поиска. Моя проблема реализует ту же идею использования (?), (Variable) в команде, где есть также поиск. До сих пор я пробовал несколько разных вариантов. –
Редактировать вопрос, чтобы показать, что вы пробовали. –