Получение данных из таблицы SQLite
В этом материале речь пойдет о команде SELECT для получения данных из таблицы SQLite в приложении Python. Вы узнаете, как доставать строки с данными благодаря встроенному модулю sqlite3.
- Получать все строки с помощью с помощью cursor.fetchall() .
- Использовать cursor.fetchmany(size) для получения ограниченного количества строк, а также cursor.fetchone() — для одной.
- Использовать переменные Python в запросе SQLite для передачи динамических данных.
Подготовка
Перед работой с этой Python-программой нужно убедиться, что вы знаете название и подробности о колонках той SQLite-таблицы, с которой предстоит работать.
В этом примере будет использоваться таблица sqlitedb_developers . Она была создана в первой части руководства по sqlite3 и заполнена во второй.
Шаги для получения строк из таблицы SQLite
Для выполнения операции SELECT из Python нужно выполнить следующие шаги:
- Установить соединение с базой данных SQLite из Python;
- Создать запрос с инструкцией SELECT для SQLite. Именно на этом этапе понадобятся знания названия таблицы и подробностей о колонках;
- Выполнить SELECT-запрос с помощью метода cursor.execute()
- Получить строки с помощью объекта Cursor и метода cursor.fetchall() ;
- Перебрать строки и получить для каждой ее соответствующее значение;
- Закрыть объект Cursor и соединение с базой данных SQLite;
- Перехватить любые исключения, которые могут возникнуть в процессе работы.
Пример программы на Python для получения всех строк из таблицы sqlitedb_developers .
import sqlite3
def read_sqlite_table(records):
try:
sqlite_connection = sqlite3.connect('sqlite_python.db')
cursor = sqlite_connection.cursor()
print("Подключен к SQLite")
sqlite_select_query = """SELECT * from sqlitedb_developers"""
cursor.execute(sqlite_select_query)
records = cursor.fetchall()
print("Всего строк: ", len(records))
print("Вывод каждой строки")
for row in records:
print("ID:", row[0])
print("Имя:", row[1])
print("Почта:", row[2])
print("Добавлен:", row[3])
print("Зарплата:", row[4], end="\n\n")
cursor.close()
except sqlite3.Error as error:
print("Ошибка при работе с SQLite", error)
finally:
if sqlite_connection:
sqlite_connection.close()
print("Соединение с SQLite закрыто")
read_sqlite_table()Подключен к SQLite Всего строк: 6 Вывод каждой строки ID: 1 Имя: Oleg Почта: oleg04@gmail.com Добавлен: 2020-11-29 Зарплата: 8100.0 . ID: 6 Имя: Nikita Почта: aqillysso@gmail.com Добавлен: 2020-11-27 Зарплата: 7400.0 Соединение с SQLite закрыто
В этом примере прямо отображаются строка и значение ее колонки. Если вам нужно использовать значения колонки в своей программе, то их можно сохранять в переменные Python. Для этого нужно написать, например, так: name = row[1] .
Разбор примера
- Эта строка импортирует в программу модуль sqlite3.
- С помощью классов и методов из этого модуля можно прямо взаимодействовать с базой данных.
sqlite3.connect() и connection.cursor() :
- С помощью sqlite3.connect() устанавливается соединение с базой данных SQLite из Python.
- После этого готовится SELECT-запрос для получения всех строк из таблицы sqlitedb_developers . Она содержит пять колонок.
- Метод connection.cursor() используется для получения объекта Cursor из объекта соединения.
cursor.execute() и cursor.fetchall() :
- Выполняется SELECT-операция с помощью метода execute() объекта Cursor .
- После успешного выполнения запроса используется метод cursor.fetchall() для получения всех записей таблицы sqlitedb_developers .
- В конце используется цикл для перебора всех записей и вывода их по одному.
После того как все записи были получены, объект Cursor закрывается с помощью cursor.close() , а соединение с базой данных — с помощью sqliteConnection.close() .
- Используйте cursor.execute() для выполнения запроса.
- cursor.fetchall() — получение всех строк.
- cursor.fetchone() — для одной строки.
- cursor.fetchmany(SIZE) — для ограниченного количества строк.
Использование переменных в качестве параметров Select-запроса
Часто есть необходимость передать переменную в SELECT-запрос для проверки определенного условия.
Предположим, приложение хочет сделать запрос для получения информации о разработчиках, используя их id. Для этого необходим запрос с параметрами. Это такой запрос, где внутри используются заполнители (?) на месте параметров, которые потом заменяются реальными значениями.
cursor.execute("SELECT salary FROM sqlitedb_developers WHERE )
import sqlite3
def get_developer_info(id):
try:
sqlite_connection = sqlite3.connect('sqlite_python.db')
cursor = sqlite_connection.cursor()
print("Подключен к SQLite")
sql_select_query = """select * from sqlitedb_developers where /> cursor.execute(sql_select_query, (id,))
records = cursor.fetchall()
print("Вывод ID ", id)
for row in records:
print("ID:", row[0])
print("Имя:", row[1])
print("Почта:", row[2])
print("Добавлен:", row[3])
print("Зарплата:", row[4], end="\n\n")
cursor.close()
except sqlite3.Error as error:
print("Ошибка при работе с SQLite", error)
finally:
if sqlite_connection:
sqlite_connection.close()
print("Соединение с SQLite закрыто")
get_developer_info(2)Подключен к SQLite Вывод ID 2 ID: 2 Имя: Viktoria Почта: s_dom34@gmail.com Добавлен: 2020-11-19 Зарплата: 6000.0 Соединение с SQLite закрыто
Получение нескольких строк из таблицы
В некоторых случаев попытка получить все строки из таблицы займет слишком много времени, особенно, если их там тысячи.
Для получения всех строк нужно больше ресурсов: памяти и времени обработки. А для улучшения производительности в таких случаях рекомендуется использовать метод fetchmany(size) класса сursor для получения фиксированного количество строк.
С помощью cursor.fetchmany(size) можно указать, сколько строк требуется прочесть. Рассмотрим на примере:
import sqlite3
def read_limited_rows(row_size):
try:
sqlite_connection = sqlite3.connect('sqlite_python.db')
cursor = sqlite_connection.cursor()
print("Подключен к SQLite")
sqlite_select_query = """SELECT * from sqlitedb_developers"""
cursor.execute(sqlite_select_query)
print("Чтение ", row_size, " строк")
records = cursor.fetchmany(row_size)
print("Вывод каждой строки \n")
for row in records:
print("ID:", row[0])
print("Имя:", row[1])
print("Почта:", row[2])
print("Добавлен:", row[3])
print("Зарплата:", row[4], end="\n\n")
cursor.close()
except sqlite3.Error as error:
print("Ошибка при работе с SQLite", error)
finally:
if sqlite_connection:
sqlite_connection.close()
print("Соединение с SQLite закрыто")
read_limited_rows(2)Подключен к SQLite Чтение 2 строк Вывод каждой строки ID: 1 Имя: Oleg Почта: oleg04@gmail.com Добавлен: 2020-11-29 Зарплата: 8100.0 ID: 2 Имя: Viktoria Почта: s_dom34@gmail.com Добавлен: 2020-11-19 Зарплата: 6000.0 Соединение с SQLite закрыто
Примечание: в этой программе был сделан запрос на получение двух записей. Но если в таблице их меньше, то вернется именно такое количество.
Получение одной строки из таблицы
Когда нужно получить одну строку из таблицы SQLite, стоит использовать метод fetchone() класса cursor . Этот метод необходим в тех случаях, когда известно, что запрос вернет одну строку.
cursor.fetchone() получает только следующую строку из результата. Если же строк нет, то возвращается None . Пример:
import sqlite3
def read_single_row(developer_id):
try:
sqlite_connection = sqlite3.connect('sqlite_python.db')
cursor = sqlite_connection.cursor()
print("Подключен к SQLite")
sqlite_select_query = """SELECT * from sqlitedb_developers where /> cursor.execute(sqlite_select_query, (developer_id, ))
print("Чтение одной строки \n")
record = cursor.fetchone()
print("ID:", record[0])
print("Имя:", record[1])
print("Почта:", record[2])
print("Добавлен:", record[3])
print("Зарплата:", record[4])
cursor.close()
except sqlite3.Error as error:
print("Ошибка при работе с SQLite", error)
finally:
if sqlite_connection:
sqlite_connection.close()
print("Соединение с SQLite закрыто")
read_single_row(3)Подключен к SQLite Чтение одной строки ID: 3 Имя: Valentin Почта: exp3@gmail.com Добавлен: 2020-11-23 Зарплата: 6500.0 Соединение с SQLite закрыто
Вывод данных из таблицы SQLite [Часть 3]
13 августа 2015 г.
Archy
Просмотров: 47680
RSS
1
Примеры Python » SQLite » Общие вопросы
sqlite get row, sqlite python, sqlite вывод, вывод данных sqlite
В предыдущей статьи [часть 2] мы рассмотрели моменты создания таблицы в базу данных и внесения данных в эту таблицу. В данной статье покажем пример как получить данные из таблицы.
#!/usr/bin/python # -*- coding: utf-8 -*- import sqlite3 as lite import sys con = lite.connect('test.db') with con: cur = con.cursor() cur.execute("SELECT * FROM Cars") rows = cur.fetchall() for row in rows: print row
В этом примере, мы извлекаем все данные из таблицы Cars.
cur.execute("SELECT * FROM Cars")
Этот SQL запрос выбирает все данные из таблицы Cars.
Метод fetchall() получает все записи. Он возвращает результирующий набор. Технически, это кортеж. Каждый из внутренних кортежей представляет строку в таблице.
for row in rows: print row
Мы выводим данные в консоль, строка за строкой.
$ ./retrieveall.py (1, u'Audi', 52642) (2, u'Mercedes', 57127) (3, u'Skoda', 9000) (4, u'Volvo', 29000) (5, u'Bentley', 350000) (6, u'Citroen', 21000) (7, u'Hummer', 41400) (8, u'Volkswagen', 21600)Получить все данные сразу нельзя, можно только в строковом виде.
#!/usr/bin/python # -*- coding: utf-8 -*- import sqlite3 as lite import sys con = lite.connect('test.db') with con: cur = con.cursor() cur.execute("SELECT * FROM Cars") while True: row = cur.fetchone() if row == None: break print row[0], row[1], row[2]
В этом скрипте мы соединяемся с базой данных и получаем строки таблицы Cars одну за одной.
Данный скрипт можно запускать и у себя на сервере, будь то личный компьютер или VPS от host virtual server на mirohost.net которые знамениты своим качеством предоставления услуг и быстрой технической поддержкой.
Мы обращаемся к данным из цикла «While». Когда мы читаем последнюю строку, цикл завершается.
row = cur.fetchone() if row == None: break
Метод fetchone() возвращает следующую строку из таблицы. Если данных там больше не осталось, он возвращает None. В этом случае, мы прерываем цикл.
Данные возвращаются в форме кортежа. Здесь мы выбираем записи из кортежа. Первая – это ID, вторая – название машины и третья – цена машины.
$ ./retrieveonebyone.py 1 Audi 52642 2 Mercedes 57127 3 Skoda 9000 4 Volvo 29000 5 Bentley 350000 6 Citroen 21000 7 Hummer 41400 8 Volkswagen 21600Такой результат скрипта мы получили после его выполнения.