Быстрый в изучении - мощный в программировании
>> Telegram ЧАТ для Python Программистов

Свободное общение и помощь советом и решением проблем с кодом! Заходите в наш TELEGRAM ЧАТ!

>> Python Форум Помощи!

Мы создали форум где отвечаем на все вопросы связанные с языком программирования Python. Ждем вас там!

>> Python Канал в Telegram

Обучающие статьи, видео и новости из мира Python. Подпишитесь на наш TELEGRAM КАНАЛ!

Запросы с параметрами в SQLite [Часть 4]

Запросы с параметрами в SQLite

Сейчас мы научимся работать с параметрами при создании запроса. Когда мы используем параметризованные запросы, мы используем местозаполнители вместо прямого написания значений в SQL запросе. Запросы с указанием параметров отдельно увеличивают безопасность и производительность.

Python модуль sqlite3 поддерживает два типа заполнителей: знаки вопроса и именованные заполнители.

#!/usr/bin/python
# -*- coding: utf-8 -*-
 
import sqlite3 as lite
import sys
 
uId = 1
uPrice = 62300 
 
con = lite.connect('test.db')
with con:
    cur = con.cursor()    
    cur.execute("UPDATE Cars SET Price=? WHERE Id=?", (uPrice, uId))        
    con.commit()
    print "Number of rows updated: %d" % cur.rowcount

Мы обновляем цену одной машины. В этом примере кода, мы используем заполнители типа «знак вопроса».

cur.execute("UPDATE Cars SET Price=? WHERE Id=?", (uPrice, uId))

Знаки вопроса ? являются заполнителями для значений. Значения добавляются на его место.

print "Number of rows updated: %d" % cur.rowcount

Свойство rowcount возвращает количество обновленных строк. В нашем случае, одна строка была обновлена.

Такой подход программирования и создания запрос к базе данных увеличивает безопасность приложения. webmartsoft.ru/web-razrabotka.html - профессиональная веб разработка выполняет качественные и безопасные проекты которые позволяют своим клиентам не бояться за сохранность данных своего сайта.

$ ./prepared.py
Number of rows updated: 1
 
Id          Name        Price     
----------  ----------  ----------
1           Audi        62300 

Была обновлена цена машины.

Второй пример использует запрос с параметрами с именованными заполнителями.

#!/usr/bin/python
# -*- coding: utf-8 -*-
 
import sqlite3 as lite
import sys
 
uId = 4
con = lite.connect('test.db')
with con:
    cur = con.cursor()    
    cur.execute("SELECT Name, Price FROM Cars WHERE Id=:Id", 
        {"Id": uId})        
    con.commit()
    
    row = cur.fetchone()
    print row[0], row[1]

Мы выбираем название и цену машины, используя именованные заполнители.

cur.execute("SELECT Name, Price FROM Cars WHERE Id=:Id", 
    {"Id": uId})

Именованные заполнители начинаются с символа двоеточия.