Как вставить переменную в sql запрос на python
Перейти к содержимому

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

  • автор:

Передать аргументы из переменных в SQL-запрос

Таким образом не выходит. И еще подскажите, пожалуйста, в моей таблице есть поле used, в котором по умолчанию во всех записях 0 , мне нужно, чтобы запрос обновлял первую попавшуюся запись, где used равно 0 , а остальные не трогал. Благодарю!

Отслеживать
задан 1 апр 2020 в 0:05
Никита Виноградов Никита Виноградов
121 1 1 золотой знак 1 1 серебряный знак 12 12 бронзовых знаков

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Для конкатенции строки с переменными вы можете использовать один из следующих вариантов:

  • Обычная конкатенция оператором +
  • Форматирования с помощью оператора %
  • Использовать метод format() для строк
  • Использовать f-строки (только для python 3)

Пример с использованием метода .format()

def insertUser(ID, AUTHOR): con = lite.connect("something.db") with con: cur = con.cursor() sql = """UPDATE someth SET used = 1, dis_name = <>, dis_id = <> WHERE used = 0 ORDER BY id ASC LIMIT 1""".format(AUTHOR, ID) cur.execute(sql) 

Для того, чтобы обновить только первую запись, необходимо использовать команду LIMIT с значением 1 вместе ORDER BY (для сортировки по ключевому полю). В примере использована колонка id (как правило, так обозначают в таблицах primary key поля). Если у вас нет такого поля, можете заменить на существующее

UPDATE:

Если вы используете sqlite, скомпилированную без объявления опции

#define SQLITE_ENABLE_UPDATE_DELETE_LIMIT 

То предыдущий код работать не будет, но вы можете реализовать аналог с помощью подзапроса:

def insertUser(ID, AUTHOR): con = lite.connect("something.db") with con: cur = con.cursor() sql = """UPDATE someth SET used = 1, dis_name = <>, dis_id = <> WHERE used = ( SELECT id FROM someth WHERE ORDER BY id ASC LIMIT 1) """.format(AUTHOR, ID) cur.execute(sql) 

Либо перекомпировать sqlite согласно инструкции с включенной опцией SQLITE_ENABLE_UPDATE_DELETE_LIMIT

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

Чтобы передать переменную в SQL запрос в Python, вы можете использовать параметризованный запрос. Вот пример:

import mysql.connector mydb = mysql.connector.connect( host="localhost", user="yourusername", password="yourpassword", database="mydatabase" ) mycursor = mydb.cursor() sql = "SELECT * FROM customers WHERE address = %s" adr = ("Yellow Garden 2", ) mycursor.execute(sql, adr) myresult = mycursor.fetchall() for x in myresult: print(x) 

В этом примере мы передаем переменную adr в SQL запрос. Мы используем %s в запросе как заполнитель для нашей переменной. Затем мы передаем нашу переменную в функцию execute() вместе с запросом.

Это позволяет избежать SQL инъекций и делает ваш код более безопасным.

Для более детального изучения вопроса «SQL инъекции» рекомендуем просмотреть урок Безопасность из курса Python: Веб-разработка (Flask)

Вставка переменной в запрос sql

Author24 — интернет-сервис помощи студентам

Вставка переменной в запрос
query.exec_("insert into person values(», , », 0, 0,0,0,0,0)") нужно вместо любого 0 поставить.

Вставка переменной в SQL — запрос
Как вставить значение выбранного элемента в комбобоксе в sql-запрос? select * from table where.

Вставка переменной в запрос
Здравствуйте, я делаю фильтрацию таблицы по цене билета и наткнулся на такую проблему. Я ввожу в.

Вставка переменной в запрос к json
data.var?.stats Var — переменная, получаемая от пользователя. JSON возвращает undefined, как нужно.

Вставка переменной в запрос MYSQL
Привет, в результате запроса создаются пустые строки в БД. Есть сомнения по поводу пунктуации.

Передача переменной в запрос связанного сервера

В этой статье описывается передача переменной в запрос связанного сервера.

Исходная версия продукта: электронная документация по SQL Server
Оригинальный номер базы знаний: 314520

Аннотация

При запросе связанного сервера часто выполняется сквозной запрос, в котором используется OPENQUERY инструкция , OPENROWSET или OPENDATASOURCE . Примеры можно просмотреть в электронной документации по SQL Server, чтобы узнать, как это сделать с помощью предварительно определенных строк Transact-SQL, но примеров передачи переменной в эти функции нет. В этой статье приведены три примера передачи переменной в запрос связанного сервера.

Чтобы передать переменную в одну из сквозных функций, необходимо создать динамический запрос.

Все данные, которые включают кавычки, требуют определенной обработки.

Передача базовых значений

Если базовая инструкция Transact-SQL известна, но необходимо передать одно или несколько конкретных значений, используйте код, аналогичный следующему примеру:

DECLARE @TSQL varchar(8000), @VAR char(2) SELECT @VAR = 'CA' SELECT @TSQL = 'SELECT * FROM OPENQUERY(MyLinkedServer,''SELECT * FROM pubs.dbo.authors WHERE state = ''''' + @VAR + ''''''')' EXEC (@TSQL) 

Передача всего запроса

Если необходимо передать весь запрос Transact-SQL или имя связанного сервера (или и то, и другое), используйте код, аналогичный следующему примеру:

DECLARE @OPENQUERY nvarchar(4000), @TSQL nvarchar(4000), @LinkedServer nvarchar(4000) SET @LinkedServer = 'MyLinkedServer' SET @OPENQUERY = 'SELECT * FROM OPENQUERY('+ @LinkedServer + ',''' SET @TSQL = 'SELECT au_lname, au_id FROM pubs..authors'')' EXEC (@OPENQUERY+@TSQL) 

Использование хранимой процедуры Sp_executesql

Чтобы избежать многослойных кавычек, используйте код, аналогичный следующему примеру:

DECLARE @VAR char(2) SELECT @VAR = 'CA' EXEC MyLinkedServer.master.dbo.sp_executesql N'SELECT * FROM pubs.dbo.authors WHERE state = @state', N'@state char(2)', @VAR 

См. также

Дополнительную информацию см. в следующих статьях:

  • OPENROWSET (Transact-SQL)
  • OPENQUERY (Transact- SQL)
  • OPENDATASOURCE (Transact-SQL)
  • sp_executesql (Transact-SQL)

Обратная связь

Были ли сведения на этой странице полезными?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *