Как вставить переменную в 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

Есть что добавить? Зарегистрируйтесь

или войдите в аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Курсы по программированию в Хекслете

Программирование

Веб-разработка

Разработка, верстка и деплой сайтов и веб-приложений, трудоустройство для разработчиков

Frontend-разработка

Разработка внешнего интерфейса сайтов и веб-приложений и верстка

Создание сайтов

Разработка сайтов и веб-приложений на JS, Python, Java, PHP и Ruby on Rails

Backend-разработка

Разработка серверной части сайтов и веб-приложений

Тестирование

Ручное тестирование и автоматизированное тестирование на JS, Python, Java и PHP

Аналитика данных

Сбор, анализ и интерпретация данных на Python

Интенсивные курсы

Интенсивное обучение для продолжающих

DevOps

Автоматизация настройки локального окружения и серверов, развертывания и деплоя

Математика для программистов

Обучение разделам математики, которые будут полезны при изучении программирования

Тест-драйв

JavaScript

Разработка сайтов и веб-приложений и автоматизированное тестирование на JS

Python

Веб-разработка, автоматическое тестирование и аналитика данных на Python

Java

Веб-разработка и автоматическое тестирование на Java

PHP

Веб-разработка и автоматическое тестирование на PHP

Ruby

Разработка сайтов и веб-приложений на Ruby on Rails

Go

Курсы по веб-разработке на языке Go

HTML

Современная верстка с помощью HTML и CSS

SQL

Проектирование базы данных, выполнение SQL-запросов и изучение реляционных СУБД

Git

Система управления версиями Git, регулярные выражения и основы командой строки

Бесплатные курсы

Бесплатные курсы по тестированию, дата-аналитике, верстке, программированию на Python, Java, PHP и JavaScript.