Рубрики
Без рубрики

Учебник Python SQLite

Python SQLite, Python SQLite3, Python SQLite Create База данных, Python SQLite Create Table Если не существует, Python SQLite Пример Учебности, управление транзакциями Python SQLite, обновление SQLite Python SQLite.

Автор оригинала: Pankaj Kumar.

Если вы ищете что-то, с помощью которого вы можете использовать полные операции БД в свое приложение, без необходимости установки программы серверов базы данных, таких как MySQL, PostgreSQL или Oracle, Python SQLite3 Модуль для вас.

Python sqlite.

Python SQLite3 – это отличный модуль, с которым вы можете выполнять все возможные операции БД с памятью и постоянной базой данных в ваших приложениях.

Этот модуль реализует Python DB API Интерфейс должен быть совместимым решением для реализации операций, связанных с SQL в программе.

Использование модуля SQLite3

В этом разделе мы начнем использовать SQLite3 Модуль в нашем приложении, чтобы мы могли создавать базы данных и таблицы внутри него и выполнять различные операции БД на нем. Давайте начнем.

Python SQLite Create База данных

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

Вот пример программы, которая создает новую базу данных перед открытием ее для операций:

import os
import sqlite3

db_filename = 'journaldev.db'

db_exists = not os.path.exists(db_filename)
connection = sqlite3.connect(db_filename)

if db_exists:
    print('No schema exists.')
else:
    print('DB exists.')

connection.close()

Мы проверим программу дважды, чтобы проверить, работает ли она правильно. Давайте посмотрим на вывод этой программы:

Создать новую БД

Как и ожидалось, второй раз мы запустим программу, мы видим вывод как БД существует Отказ

Python SQLite Create Table

Чтобы начать работу с базой данных, мы должны определить таблицу схемы, на которую мы будем писать наши дополнительные запросы и выполнять операции. Вот схема, которую мы будем следовать:

Схема таблицы SQLite Python

Для одной и той же схемы мы будем писать связанные с SQL Query Next, и эти запросы будут сохранены в book_schema.sql :

CREATE TABLE book (
    name        text primary key,
    topic       text,
    published   date
);

CREATE TABLE chapter (
    id           number primary key autoincrement not null,
    name         text,
    day_effort   integer,
    book         text not null references book(name)
);

Теперь будем использовать Подключиться () Функция для подключения к базе данных и вставить некоторые исходные данные с использованием executeScript () Функция:

import os
import sqlite3

db_filename = 'journaldev.db'
schema_filename = 'book_schema.sql'

db_exists = not os.path.exists(db_filename)

with sqlite3.connect(db_filename) as conn:
    if db_exists:
        print('Creating schema')
        with open(schema_filename, 'rt') as file:
            schema = file.read()
        conn.executescript(schema)

        print('Inserting initial data')

        conn.executescript("""
        insert into book (name, topic, published)
        values ('JournalDev', 'Java', '2011-01-01');

        insert into chapter (name, day_effort, book)
        values ('Java XML', 2,'JournalDev');

        insert into chapter (name, day_effort, book)
        values ('Java Generics', 1, 'JournalDev');

        insert into chapter (name, day_effort, book)
        values ('Java Reflection', 3, 'JournalDev');
        """)
    else:
        print('DB already exists.')

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

БД с исходными данными

Посмотрите, как я смог запросить каталог файла DB из командной строки. Мы будем запросить данные из самого модуля SQLite3 в следующем разделе.

Выбор курсора Python SQLite Select

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

import sqlite3

db_filename = 'journaldev.db'

with sqlite3.connect(db_filename) as conn:
    cursor = conn.cursor()

    cursor.execute("""
    select id, name, day_effort, book from chapter
    where book = 'JournalDev'
    """)

    for row in cursor.fetchall():
        id, name, day_effort, book = row
        print('{:2d} ({}) {:2d} ({})'.format(
            id, name, day_effort, book))

Давайте посмотрим на вывод этой программы:

Получить данные из БД

Это был простой пример получения данных из таблицы, где один столбец соответствует определенному значению.

Получение метаданных таблицы

В наших программах также важно получить метаданные для таблицы для целей документации и гораздо больше:

import sqlite3

db_filename = 'journaldev.db'

with sqlite3.connect(db_filename) as connection:
    cursor = connection.cursor()

    cursor.execute("""
    select * from chapter where book = 'JournalDev'
    """)

    print('Chapter table has these columns:')
    for column_info in cursor.description:
        print(column_info)

Давайте посмотрим на вывод этой программы:

Метаданные стола

Из-за причины создания схемы мы не предоставили колонку чего-либо от их имени, большинство значений нет.

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

С именованными параметрами мы можем пройти аргументы нашим сценариям и, следовательно, SQL-запросы мы пишем в наших программах. Использование именованных параметров очень легко, давайте посмотрим, как мы можем сделать это:

import sqlite3
import sys

db_filename = 'journaldev.db'
book_name = sys.argv[1]

with sqlite3.connect(db_filename) as conn:
    cursor = conn.cursor()

    query = """
    select id, name, day_effort, book from chapter
    where book = :book_name
    """

    cursor.execute(query, {'book_name': book_name})
    for row in cursor.fetchall():
        id, name, day_effort, book = row
        print('{:2d} ({}) {:2d} ({})'.format(
            id, name, day_effort, book))

Давайте посмотрим на вывод этой программы:

Прохождение именованного параметра

Посмотрите, как легко пройти названный параметр и заменить его в запрос прямо перед его выполнением.

Управление транзакциями Python SQLite3

Ну, транзакции – это функция, для которой известны реляционные базы данных. Модуль SQLite3 полностью способен управлять внутренним состоянием транзакции, единственное, что нам нужно сделать, это позволить ему знать, что транзакция произойдет.

Вот образец программы, которая описывает, как мы пишем транзакции в нашей программе, явно вызывая совершать () Функция:

import sqlite3

db_filename = 'journaldev.db'

def show_books(conn):
    cursor = conn.cursor()
    cursor.execute('select name, topic from book')
    for name, topic in cursor.fetchall():
        print('  ', name)


with sqlite3.connect(db_filename) as conn1:
    print('Before changes:')
    show_books(conn1)

    # Insert in one cursor
    cursor1 = conn1.cursor()
    cursor1.execute("""
    insert into book (name, topic, published)
    values ('Welcome Python', 'Python', '2013-01-01')
    """)

    print('\nAfter changes in conn1:')
    show_books(conn1)

    # Select from another connection, without committing first
    print('\nBefore commit:')
    with sqlite3.connect(db_filename) as conn2:
        show_books(conn2)

    # Commit then select from another connection
    conn1.commit()
    print('\nAfter commit:')
    with sqlite3.connect(db_filename) as conn3:
        show_books(conn3)

Давайте посмотрим на вывод этой программы:

Работает транзакциями

Когда show_books (...) Функция называется до Conn1 был совершен, результат зависит от того, какое соединение используется. Как изменения были сделаны из Conn1 это видит внесенные изменения, но Conn2 нет. Как только мы совершили все изменения, все соединения смогли увидеть внесенные изменения, включая Conn3 Отказ

Заключение

В этом уроке мы изучали основы модуля SQLite3 в Python и преданные транзакциями также. Когда ваша программа хочет работать с некоторыми реляционными данными, модуль SQLite3 обеспечивает простой способ справиться с данными и получать результаты по всей жизни программы.

Загрузите исходный код