Передать аргументы из переменных в 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

Вставка переменной в запрос
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)
Обратная связь
Были ли сведения на этой странице полезными?