Как вставить переменную в sql запрос
Чтобы вставить переменную в SQL-запрос, вам нужно использовать специальный синтаксис в зависимости от типа базы данных.
Например, если вы используете MySQL, то для вставки переменной в запрос можно использовать символ ?
, а затем передать значения переменных в запрос с помощью метода execute()
:
INSERT INTO mytable (column1, column2, column3)
VALUES (?, ?, ?);
Затем, при выполнении запроса, вы должны передать кортеж значений, содержащий значения для каждой переменной, например:
cursor.execute("INSERT INTO mytable (column1, column2, column3)
VALUES (?, ?, ?)", (value1, value2, value3))
В других базах данных, таких как PostgreSQL или Oracle, вы можете использовать именованные параметры вместо символа ?. Например:
INSERT INTO mytable (column1, column2, column3)
VALUES (:value1, :value2, :value3);
А затем, при выполнении запроса, вы можете передать словарь, содержащий значения для каждой переменной:
cursor.execute("INSERT INTO mytable (column1, column2, column3)
VALUES (:value1, :value2, :value3)", {'value1': 'foo', 'value2': 'bar', 'value3': 'baz'})
В обоих случаях используется привязка параметров, что позволяет защитить запрос от инъекций и упрощает вставку значений в запросы.
В самих SQL запросах не используются переменные, в них уже подставлены данные. Но переменные используются в коде приложения. Например, для вставки переменной в SQL запрос в Python используются параметризованные запросы. Это делается для предотвращения SQL-инъекций.
Например, если мы используем psycopg2
import psycopg2
cursor = connection.cursor()
name = "John"
age = 30
query = "SELECT * FROM users WHERE name = %s AND age = %s"
cursor.execute(query, (name, age))
Или для библиотеки mysql-connector-python
:\
import mysql.connector
cursor = connection.cursor()
name = "John"
age = 30
query = "SELECT * FROM users WHERE name = %s AND age = %s"
cursor.execute(query, (name, age))
Важно: никогда не форматируйте SQL запросы с помощью f-строк или метода format()
, так как это может привести к SQL-инъекциям.
# Так делать нельзя!
query = f"SELECT * FROM users WHERE name = '{name}' AND age = {age}"