Как вставить переменную в sql запрос

Аватар пользователя Даниил Першин
Даниил Першин
09 апреля 2023

Чтобы вставить переменную в 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'})

В обоих случаях используется привязка параметров, что позволяет защитить запрос от инъекций и упрощает вставку значений в запросы.

0 0
Аватар пользователя Ivan Mamtsev
Ivan Mamtsev
21 августа 2024

В самих 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}"
0 0
Познакомьтесь с основами SQL бесплатно