В этой главе вы узнаете, как использовать SQLite в программах на Python.
Монтаж
SQLite3 может быть интегрирован с Python с использованием модуля sqlite3, который был написан Герхардом Харингом. Он обеспечивает интерфейс SQL, совместимый со спецификацией DB-API 2.0, описанной в PEP 249. Вам не нужно устанавливать этот модуль отдельно, поскольку он поставляется по умолчанию вместе с Python версии 2.5.x и выше.
Чтобы использовать модуль sqlite3, сначала необходимо создать объект подключения, представляющий базу данных, а затем при желании вы можете создать объект курсора, который поможет вам выполнить все операторы SQL.
API модуля Python sqlite3
Ниже приведены важные подпрограммы модуля sqlite3, которые могут удовлетворить ваши требования по работе с базой данных SQLite из вашей программы Python. Если вы ищете более сложное приложение, вы можете посмотреть официальную документацию модуля Python sqlite3.
Sr.No. | API и описание |
---|---|
1 |
sqlite3.connect (база данных [, время ожидания, другие необязательные аргументы]) Этот API-интерфейс открывает соединение с файлом базы данных SQLite. Вы можете использовать «: memory:», чтобы открыть соединение базы данных с базой данных, которая находится в оперативной памяти, а не на диске. Если база данных открыта успешно, она возвращает объект подключения. Когда доступ к базе данных осуществляется несколькими подключениями, и один из процессов изменяет базу данных, база данных SQLite блокируется, пока эта транзакция не будет зафиксирована. Параметр timeout указывает, как долго соединение должно ожидать, пока блокировка не исчезнет, до возникновения исключения. Значение по умолчанию для параметра времени ожидания — 5,0 (пять секунд). Если данное имя базы данных не существует, этот вызов создаст базу данных. Вы также можете указать имя файла с требуемым путем, если вы хотите создать базу данных где-либо еще, кроме текущего каталога. |
2 |
connection.cursor ([cursorClass]) Эта подпрограмма создает курсор, который будет использоваться при программировании вашей базы данных на Python. Этот метод принимает один необязательный параметр cursorClass. Если указано, это должен быть пользовательский класс курсора, который расширяет sqlite3.Cursor. |
3 |
cursor.execute (sql [, необязательные параметры]) Эта подпрограмма выполняет инструкцию SQL. Оператор SQL может быть параметризован (т. Е. Заполнители вместо литералов SQL). Модуль sqlite3 поддерживает два вида заполнителей: вопросительные знаки и именованные заполнители (именованный стиль). Например — cursor.execute («вставить в людей значения (?,?)», (Кто, возраст)) |
4 |
connection.execute (sql [, необязательные параметры]) Эта подпрограмма является ярлыком вышеупомянутого метода execute, предоставленного объектом курсора, и она создает промежуточный объект курсора путем вызова метода курсора, а затем вызывает метод execute курсора с заданными параметрами. |
5 |
cursor.executemany (sql, seq_of_parameters) Эта подпрограмма выполняет команду SQL для всех последовательностей параметров или отображений, найденных в последовательности sql. |
6 |
connection.executemany (sql [, параметры]) Эта подпрограмма представляет собой ярлык, который создает промежуточный объект курсора путем вызова метода курсора, а затем вызывает метод cursor.s executemany с заданными параметрами. |
7 |
cursor.executescript (sql_script) Эта подпрограмма выполняет несколько операторов SQL одновременно, предоставленных в форме сценария. Сначала он выдает оператор COMMIT, а затем выполняет сценарий SQL, полученный в качестве параметра. Все операторы SQL должны быть разделены точкой с запятой (;). |
8 |
connection.executescript (sql_script) Эта подпрограмма представляет собой ярлык, который создает промежуточный объект курсора путем вызова метода курсора, а затем вызывает метод исполняемого скрипта курсора с заданными параметрами. |
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 () Эта процедура извлекает все (оставшиеся) строки результата запроса, возвращая список. Пустой список возвращается, когда нет доступных строк. |
sqlite3.connect (база данных [, время ожидания, другие необязательные аргументы])
Этот API-интерфейс открывает соединение с файлом базы данных SQLite. Вы можете использовать «: memory:», чтобы открыть соединение базы данных с базой данных, которая находится в оперативной памяти, а не на диске. Если база данных открыта успешно, она возвращает объект подключения.
Когда доступ к базе данных осуществляется несколькими подключениями, и один из процессов изменяет базу данных, база данных SQLite блокируется, пока эта транзакция не будет зафиксирована. Параметр timeout указывает, как долго соединение должно ожидать, пока блокировка не исчезнет, до возникновения исключения. Значение по умолчанию для параметра времени ожидания — 5,0 (пять секунд).
Если данное имя базы данных не существует, этот вызов создаст базу данных. Вы также можете указать имя файла с требуемым путем, если вы хотите создать базу данных где-либо еще, кроме текущего каталога.
connection.cursor ([cursorClass])
Эта подпрограмма создает курсор, который будет использоваться при программировании вашей базы данных на Python. Этот метод принимает один необязательный параметр cursorClass. Если указано, это должен быть пользовательский класс курсора, который расширяет sqlite3.Cursor.
cursor.execute (sql [, необязательные параметры])
Эта подпрограмма выполняет инструкцию SQL. Оператор SQL может быть параметризован (т. Е. Заполнители вместо литералов SQL). Модуль sqlite3 поддерживает два вида заполнителей: вопросительные знаки и именованные заполнители (именованный стиль).
Например — cursor.execute («вставить в людей значения (?,?)», (Кто, возраст))
connection.execute (sql [, необязательные параметры])
Эта подпрограмма является ярлыком вышеупомянутого метода execute, предоставленного объектом курсора, и она создает промежуточный объект курсора путем вызова метода курсора, а затем вызывает метод execute курсора с заданными параметрами.
cursor.executemany (sql, seq_of_parameters)
Эта подпрограмма выполняет команду SQL для всех последовательностей параметров или отображений, найденных в последовательности sql.
connection.executemany (sql [, параметры])
Эта подпрограмма представляет собой ярлык, который создает промежуточный объект курсора путем вызова метода курсора, а затем вызывает метод cursor.s executemany с заданными параметрами.
cursor.executescript (sql_script)
Эта подпрограмма выполняет несколько операторов SQL одновременно, предоставленных в форме сценария. Сначала он выдает оператор COMMIT, а затем выполняет сценарий SQL, полученный в качестве параметра. Все операторы SQL должны быть разделены точкой с запятой (;).
connection.executescript (sql_script)
Эта подпрограмма представляет собой ярлык, который создает промежуточный объект курсора путем вызова метода курсора, а затем вызывает метод исполняемого скрипта курсора с заданными параметрами.
connection.total_changes ()
Эта подпрограмма возвращает общее количество строк базы данных, которые были изменены, вставлены или удалены с момента открытия соединения с базой данных.
connection.commit ()
Этот метод фиксирует текущую транзакцию. Если вы не вызываете этот метод, все, что вы сделали со времени последнего вызова commit (), не будет видно из других соединений с базой данных.
connection.rollback ()
Этот метод откатывает любые изменения в базе данных с момента последнего вызова commit ().
connection.close ()
Этот метод закрывает соединение с базой данных. Обратите внимание, что это не вызывает автоматически commit (). Если вы просто закроете соединение с базой данных без предварительного вызова commit (), ваши изменения будут потеряны!
cursor.fetchone ()
Этот метод извлекает следующую строку из набора результатов запроса, возвращая одну последовательность или None, если больше нет данных.
cursor.fetchmany ([size = cursor.arraysize])
Эта процедура извлекает следующий набор строк результата запроса, возвращая список. Пустой список возвращается, когда больше нет доступных строк. Метод пытается извлечь столько строк, сколько указано параметром size.
cursor.fetchall ()
Эта процедура извлекает все (оставшиеся) строки результата запроса, возвращая список. Пустой список возвращается, когда нет доступных строк.
Подключиться к базе данных
Следующий код Python показывает, как подключиться к существующей базе данных. Если база данных не существует, она будет создана и, наконец, будет возвращен объект базы данных.
#!/usr/bin/python import sqlite3 conn = sqlite3.connect('test.db') print "Opened database successfully";
Здесь вы также можете указать имя базы данных в виде специального имени : memory: для создания базы данных в оперативной памяти. Теперь давайте запустим вышеуказанную программу, чтобы создать нашу базу данных test.db в текущем каталоге. Вы можете изменить свой путь согласно вашему требованию. Сохраните приведенный выше код в файле sqlite.py и выполните его, как показано ниже. Если база данных успешно создана, то будет отображаться следующее сообщение.
$chmod +x sqlite.py $./sqlite.py Open database successfully
Создать таблицу
Следующая программа Python будет использоваться для создания таблицы в ранее созданной базе данных.
#!/usr/bin/python import sqlite3 conn = sqlite3.connect('test.db') print "Opened database successfully"; conn.execute('''CREATE TABLE COMPANY (ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL);''') print "Table created successfully"; conn.close()
Когда вышеуказанная программа будет выполнена, она создаст таблицу COMPANY в вашем test.db и отобразит следующие сообщения:
Opened database successfully Table created successfully
ВСТАВИТЬ Операция
Следующая программа Python показывает, как создавать записи в таблице COMPANY, созданной в приведенном выше примере.
#!/usr/bin/python import sqlite3 conn = sqlite3.connect('test.db') print "Opened database successfully"; conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \ VALUES (1, 'Paul', 32, 'California', 20000.00 )"); conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \ VALUES (2, 'Allen', 25, 'Texas', 15000.00 )"); conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \ VALUES (3, 'Teddy', 23, 'Norway', 20000.00 )"); conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \ VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 )"); conn.commit() print "Records created successfully"; conn.close()
Когда вышеуказанная программа будет выполнена, она создаст указанные записи в таблице COMPANY и отобразит следующие две строки:
Opened database successfully Records created successfully
ВЫБЕРИТЕ Операцию
Следующая программа на Python показывает, как извлекать и отображать записи из таблицы COMPANY, созданной в приведенном выше примере.
#!/usr/bin/python import sqlite3 conn = sqlite3.connect('test.db') print "Opened database successfully"; 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 "Operation done successfully"; conn.close()
Когда вышеуказанная программа будет выполнена, она даст следующий результат.
Opened database successfully 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 Operation done successfully
ОБНОВЛЕНИЕ Операция
Следующий код Python показывает, как использовать инструкцию UPDATE для обновления любой записи, а затем извлекать и отображать обновленные записи из таблицы COMPANY.
#!/usr/bin/python import sqlite3 conn = sqlite3.connect('test.db') print "Opened database successfully"; conn.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 "Operation done successfully"; conn.close()
Когда вышеуказанная программа будет выполнена, она даст следующий результат.
Opened database successfully 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 Operation done successfully
УДАЛЕНИЕ Операция
Следующий код Python показывает, как использовать инструкцию DELETE для удаления любой записи, а затем извлечь и отобразить оставшиеся записи из таблицы COMPANY.
#!/usr/bin/python import sqlite3 conn = sqlite3.connect('test.db') print "Opened database successfully"; conn.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 "Operation done successfully"; conn.close()
Когда вышеуказанная программа будет выполнена, она даст следующий результат.