SQLite - Python
Установка
SQLite3 можно интегрировать с Python с помощью модуля sqlite3. Модуль sqlite3 был написан Gerhard Haring. Он предоставляет интерфейс SQL, совместимый со спецификацией DB-API 2.0, описанной в PEP 249. Вам не нужно устанавливать этот модуль отдельно, поскольку Python 2.5.x и выше включает этот модуль по умолчанию.
Чтобы использовать модуль sqlite3, сначала необходимо создать объект соединения, представляющий базу данных, а затем при желании можно создать объект курсора, который поможет вам выполнять все SQL-инструкции.
API модуля sqlite3 Python
Ниже приведены важные функции модуля sqlite3, которые могут удовлетворить ваши потребности при использовании баз данных SQLite в ваших программах на Python. Если вам нужны более подробные сведения, обратитесь к официальной документации модуля sqlite3 Python.
| Нет. | API и описание |
|---|---|
| 1 | sqlite3.connect(database [,timeout ,other optional arguments]) Этот API открывает соединение с файлом базы данных SQLite database. Вы можете использовать ":memory:", чтобы открыть подключение к базе данных в RAM, а не на диске. Если база данных успешно открыта, возвращается объект соединения. Когда база данных доступна через несколько соединений и одно из них изменяет базу данных, база данных SQLite блокируется до фиксации транзакции. Параметр timeout указывает, как долго соединение ожидает блокировку, пока не возникнет исключение и соединение не будет разорвано. По умолчанию параметр timeout равен 5.0 (5 секунд). Если указанное имя базы данных filename не существует, этот вызов создаст базу данных. Если вы не хотите создавать базу данных в текущем каталоге, можно указать имя файла с путем, чтобы можно было создать базу данных в любом месте. |
| 2 | connection.cursor([cursorClass]) Эта процедура создаёткурсор, который будет использоваться в программировании баз данных на Python. Этот метод принимает единственный необязательный параметр cursorClass. Если этот параметр указан, он должен быть пользовательским классом курсора, унаследованным от sqlite3.Cursor. |
| 3 | cursor.execute(sql [, optional parameters]) Эта процедура выполняет SQL-инструкцию. SQL-инструкция может быть параметризована (т. е. с использованием заполнителей вместо текста SQL). Модуль sqlite3 поддерживает два типа заполнителей: знаки вопроса и именованные заполнители (именованный стиль). Пример: cursor.execute("insert into people values (?, ?)", (who, age)) |
| 4 | connection.execute(sql [, optional parameters]) Эта процедура — сокращение для метода, предоставляемого описанным выше объектом-курсором. Она создаёт промежуточный объект-курсор путём вызова метода cursor(), а затем вызывает метод execute курсора с заданными параметрами. |
| 5 | cursor.executemany(sql, seq_of_parameters) Эта процедура выполняет SQL-команду для всех последовательностей параметров или отображений, найденных в seq_of_parameters. |
| 6 | connection.executemany(sql[, parameters]) Эта процедура — сокращение, которое создаёт промежуточный объект-курсор путём вызова метода cursor(), а затем вызывает метод executemany курсора с заданными параметрами. |
| 7 | cursor.executescript(sql_script) Эта процедура выполняет несколько SQL-инструкций, как только получает скрипт. Сначала она выполняет инструкцию COMMIT, а затем выполняет SQL-скрипт, переданный в качестве параметра. Все SQL-инструкции должны использовать точки с запятой;для разделения. |
| 8 | connection.executescript(sql_script) Этот метод является сокращением, которое создаёт промежуточный объект курсора, вызывая метод cursor(), а затем вызывает метод executescript этого курсора с указанными параметрами. |
| 9 | connection.total_changes() Этот метод возвращает общее количество строк базы данных, которые были изменены, вставлены или удалены с момента открытия соединения с базой данных. |
| 10 | connection.commit() Этот метод фиксирует текущую транзакцию. Если вы не вызовете этот метод, любые действия, выполненные с момента последнего вызова commit(), не будут видны другим соединениям с базой данных. |
| 11 | connection.rollback() Этот метод откатывает изменения, внесённые в базу данных с момента последнего вызова commit(). |
| 12 | connection.close() Этот метод закрывает соединение с базой данных. Обратите внимание, что он не вызывает commit() автоматически. Если вы закроете соединение с базой данных, предварительно не вызвав метод commit(), все внесённые вами изменения будут потеряны! |
| 13 | cursor.fetchone() Этот метод извлекает следующую строку в наборе результатов запроса, возвращая одну последовательность, и возвращает None, когда больше нет доступных данных. |
| 14 | cursor.fetchmany([size=cursor.arraysize]) Этот метод извлекает следующую группу строк в результирующем наборе запроса, возвращая список. Когда больше нет доступных строк, он возвращает пустой список. Этот метод пытается извлечь столько строк, сколько указано в параметре size. |
| 15 | cursor.fetchall() Эта процедура извлекает все (оставшиеся) строки в результирующем наборе запроса, возвращая список. Когда нет доступных строк, она возвращает пустой список. |
Подключение к базе данных
Следующий код Python показывает, как подключиться к существующей базе данных. Если база данных не существует, она будет создана, и в итоге будет возвращён объект базы данных.
Пример
import sqlite3
conn = sqlite3.connect('test.db')
print (База данных успешно открыта)
Здесь также можно задать имя базы данных как специальное имя:memory:, которое создаст базу данных в оперативной памяти. Теперь давайте запустим приведённую выше программу, чтобы создать нашу базу данных в текущем каталогеtest.db. Вы можете изменить путь при необходимости. Сохраните приведённый выше код в файл sqlite.py и выполните его, как показано ниже. Если база данных создана успешно, будет отображено сообщение, показанное ниже:
$chmod +x sqlite.py $./sqlite.py Open database successfully
Создание таблицы
Следующий фрагмент кода Python будет использоваться для создания таблицы в базе данных, созданной ранее:
Пример
import sqlite3
conn = sqlite3.connect('test.db')
print (База данных успешно открыта)
c = conn.cursor()
c.execute('''CREATE TABLE COMPANY
(ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL);''')
print (Таблица успешно создана)
conn.commit()
conn.close()
Когда вышеуказанная программа будет выполнена, она создаст таблицу COMPANY вtest.dbи отобразит сообщение, показанное ниже:
Database opened successfully Table created successfully
Операция INSERT
Следующая программа на Python показывает, как создать записи в таблице COMPANY, созданной выше:
Пример
import sqlite3
conn = sqlite3.connect('test.db')
c = conn.cursor()
print (База данных успешно открыта)
c.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
VALUES (1, 'Paul', 32, 'California', 20000.00 )")
c.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
VALUES (2, 'Allen', 25, 'Texas', 15000.00 )")
c.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
VALUES (3, 'Teddy', 23, 'Norway', 20000.00 )")
c.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 )")
conn.commit()
print (Данные успешно вставлены)
conn.close()
Когда вышеуказанная программа будет выполнена, она создаст заданные записи в таблице COMPANY и отобразит следующие две строки:
Database opened successfully Data inserted successfullySELECT Operation
The following Python program shows how to fetch and display records from the COMPANY table created earlier:
#!/usr/bin/pythonExample
import sqlite3
conn = sqlite3.connect('test.db')
c = conn.cursor()
print (Database opened successfully)
cursor = c.execute("SELECT id, name, address, salary from COMPANY")
for row in cursor:
print "ID = ", row[0]
print "NAME = ", row[1]
print "ADDRESS = ", row[2]
print "SALARY = ", row[3], "\n"
print (Data operation successful)
conn.close()
When the above program is executed, it will produce the following result:
数据库打开成功 ID = 1 NAME = Paul ADDRESS = California SALARY = 20000.0 ID = 2 NAME = Allen ADDRESS = Texas SALARY = 15000.0 ID = 3 NAME = Teddy ADDRESS = Norway SALARY = 20000.0 ID = 4 NAME = Mark ADDRESS = Rich-Mond SALARY = 65000.0 数据操作成功UPDATE Operation
The following Python code shows how to use the UPDATE statement to update any record, and then fetch and display the updated records from the COMPANY table:
Example
#!/usr/bin/python
import sqlite3
conn = sqlite3.connect('test.db')
c = conn.cursor()
print (Database opened successfully)
c.execute("UPDATE COMPANY set SALARY = 25000.00 where ID=1")
conn.commit()
print "Total number of rows updated :", conn.total_changes
cursor = conn.execute("SELECT id, name, address, salary from COMPANY")
for row in cursor:
print "ID = ", row[0]
print "NAME = ", row[1]
print "ADDRESS = ", row[2]
print "SALARY = ", row[3], "\n"
print (Data operation successful)
conn.close()
When the above program is executed, it will produce the following result:
数据库打开成功 Total number of rows updated : 1 ID = 1 NAME = Paul ADDRESS = California SALARY = 25000.0 ID = 2 NAME = Allen ADDRESS = Texas SALARY = 15000.0 ID = 3 NAME = Teddy ADDRESS = Norway SALARY = 20000.0 ID = 4 NAME = Mark ADDRESS = Rich-Mond SALARY = 65000.0 数据操作成功DELETE Operation
The following Python code shows how to use the DELETE statement to delete any record, and then fetch and display the remaining records from the COMPANY table:
Example
#!/usr/bin/python
import sqlite3
conn = sqlite3.connect('test.db')
c = conn.cursor()
print (Database opened successfully)
c.execute("DELETE from COMPANY where ID=2;")
conn.commit()
print "Total number of rows deleted :", conn.total_changes
cursor = conn.execute("SELECT id, name, address, salary from COMPANY")
for row in cursor:
print "ID = ", row[0]
print "NAME = ", row[1]
print "ADDRESS = ", row[2]
print "SALARY = ", row[3], "\n"
print (Data operation successful)
conn.close()
When the above program is executed, it will produce the following result:
数据库打开成功 Total number of rows deleted : 1 ID = 1 NAME = Paul ADDRESS = California SALARY = 20000.0 ID = 3 NAME = Teddy ADDRESS = Norway SALARY = 20000.0 ID = 4 NAME = Mark ADDRESS = Rich-Mond SALARY = 65000.0 数据操作成功Other Extensions