Sqlite3 python вывод данных

Получение данных из таблицы 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

Вывод данных из таблицы 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

Такой результат скрипта мы получили после его выполнения.

Источник

Читайте также:  Тег IMG
Оцените статью