Fdb, чем открытая база данных

Обновлено: 21.11.2024

FDB написан как чистый модуль Python (требуется Python 2.7 или 3.4+) поверх клиентской библиотеки Firebird (fbclient.so/dll) с использованием ctypes, поэтому перед попыткой установить FDB убедитесь, что у вас правильно установлен клиент Firebird. , иначе установка завершится ошибкой. FDB поддерживает Firebird версии 2.0 и выше.

FDB распространяется в виде пакета setuptools, и предпочтительный метод установки — с помощью инструмента pip.

Установка из PYPI¶

Установка из исходников¶

Загрузите архив с исходным кодом, распакуйте его, затем выполните команду установки:

Краткое руководство¶

Это краткое руководство предназначено для того, чтобы читатель начал работу с демонстрации элементарного использования FDB. Это не исчерпывающее руководство по API баз данных Python, и оно не охватывает все остальное.

Многочисленные расширенные функции FDB описаны в другом разделе этой документации, который не является учебным пособием, но изобилует примерами.

Подключение к базе данных¶

Пример 1

Соединение с базой данных обычно устанавливается с помощью такого кода:

Пример 2

Предположим, мы хотим подключиться к базе данных на диалекте SQL 1 и указать UTF-8 в качестве набора символов для подключения:

Выполнение операторов SQL¶

Для этого раздела предположим, что у нас есть таблица, определенная и заполненная следующим кодом SQL:

Пример 1

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

Пример 2

Вот еще один тривиальный пример, демонстрирующий различные способы получения одной строки за раз из SELECT -cursor:

Пример 3

Следующая программа представляет собой упрощенный табличный принтер (в данном примере применяется к языкам):

Пример 4

Давайте добавим больше языков:

Обратите внимание на использование параметризованного оператора SQL выше. При работе с повторяющимися операторами это намного быстрее и менее подвержено ошибкам, чем сборка каждого оператора SQL вручную. (Подробнее о параметризованных операторах SQL можно прочитать в разделе «Подготовленные операторы».)

После запуска примера 4 настольный принтер из примера 3 будет печатать:

Вызов хранимых процедур¶

Firebird поддерживает хранимые процедуры, написанные на проприетарном процедурном языке SQL. Сохраненные процедуры Firebird могут иметь параметры входные и/или параметры выходные. Некоторые базы данных поддерживают параметры ввода/вывода, где один и тот же параметр используется как для ввода, так и для вывода; Firebird не поддерживает это.

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

Синтаксис процедурного SQL на серверной в Firebird не делает такого различия, но клиентский код SQL (и код C API) должен. Результирующий набор извлекается из хранимой процедуры с помощью оператора SELECT из процедуры, тогда как выходные параметры извлекаются с помощью оператора `EXECUTE PROCEDURE.

Чтобы получить набор результатов из хранимой процедуры с помощью FDB, используйте следующий код:

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

Последнее не очень элегантно; было бы предпочтительнее обращаться к выходным параметрам процедуры как к возвращаемому значению Cursor.callproc() . Однако спецификация Python DB API требует текущего поведения.

© Copyright 2009-2021 Павел Цисар.
Создано с использованием Sphinx 1.8.5.

В подкаталоге examples вашей установки Firebird находится образец базы данных с именем employee.fdb . Вы можете использовать эту базу данных, чтобы «попробовать свои крылья».

Имя сервера и путь

Если вы перемещаете образец базы данных, убедитесь, что вы переместили его на жесткий диск, физически подключенный к вашему серверу. Общие ресурсы, подключенные диски или (в Unix) смонтированные файловые системы SMB (Samba) не будут работать. Это же правило применяется ко всем создаваемым вами базам данных.

Строка подключения TCP/IP состоит из двух элементов: имени сервера и пути к диску/файловой системе. Его формат следующий:

Для сервера Linux:

Пример на сервере Linux или другом Posix с именем serverxyz:

Для сервера Windows:

Инструкция CONNECT

Для подключения к базе данных Firebird пользователь должен пройти аутентификацию с использованием имени пользователя и действительного пароля. Любой пользователь, кроме SYSDBA, root (в системах Posix) или Administrator (в системах Windows, если Firebird запускается от имени этого пользователя), также должен иметь права доступа к объектам внутри базы данных. Для простоты здесь мы рассмотрим аутентификацию в качестве SYSDBA с помощью главного ключа пароля.

Использование isql

Существует несколько различных способов подключения к базе данных с помощью isql. Один из способов — запустить isql в его интерактивной оболочке. Перейдите в подкаталог bin вашей установки Firebird и в ответ на приглашение введите команду isql (в Linux: ./isql ) [↵ означает «нажмите Enter»]:

Важно

В isql каждый оператор SQL должен заканчиваться точкой с запятой. Если вы нажмете Enter и строка не заканчивается точкой с запятой, isql предполагает, что оператор продолжается на следующей строке, и подсказка изменится с SQL> на CON> . Это позволяет вам распределять длинные операторы по нескольким строкам. Если вы нажали Enter после своего утверждения и забыли точку с запятой, просто введите ее в пустой строке после приглашения CON> и снова нажмите Enter.

Если вы используете Classic Server в Linux, будет предпринята попытка быстрого прямого локального подключения, если путь к базе данных не начинается с имени хоста. Это может привести к ошибке, если ваш логин Linux не имеет достаточных прав доступа к файлу базы данных. В этом случае подключитесь к локальному хосту: /

<р>. Затем серверный процесс (с Firebird 1.5, обычно работающий как firebird) откроет файл. С другой стороны, подключение в сетевом стиле может завершиться ошибкой, если пользователь создал базу данных в классическом локальном режиме, а у сервера недостаточно прав доступа.

Если вы запускаете Classic Server в Windows, вы должны указать имя хоста (которое может быть localhost ) и полный путь, иначе соединение не будет установлено.

Хотя одинарные кавычки являются «нормой» для разделения строк в Firebird, в приведенном выше примере со строкой пути к базе данных использовались двойные кавычки. Иногда это необходимо для некоторых утилит командной строки, где строка пути содержит пробелы. Одинарные кавычки должны работать для путей, не содержащих пробелов.

Кстати, кавычки вокруг «SYSDBA» и «masterkey» необязательны. Пути к базе данных без пробелов также не нужно заключать в кавычки.

В этот момент isql сообщит вам, что вы подключены:

Чтобы вернуться к командной строке, введите

Дополнительную информацию о isql см. в разделе Использование Firebird, глава 10: Интерактивная утилита SQL (isql).

Использование клиента с графическим интерфейсом

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

Для таких инструментов довольно часто требуется, чтобы весь сервер + путь представляли собой одну строку

Помните, что имена файлов и команды в Linux и других командных оболочках Posix вводятся с учетом регистра

Создание базы данных с помощью isql

Существует несколько способов создания базы данных с помощью isql. Здесь мы рассмотрим один простой способ создания базы данных в интерактивном режиме, хотя для серьезной работы по определению базы данных вам следует создавать и поддерживать объекты метаданных с помощью сценариев определения данных. В руководстве Использование Firebird есть целая глава, посвященная этой теме.

Запуск isql

Чтобы создать базу данных в интерактивном режиме с помощью командной оболочки isql, откройте командную строку в подкаталоге bin Firebird и введите isql (Windows) или ./isql (Linux):

Инструкция CREATE DATABASE

Теперь вы можете создать новую базу данных в интерактивном режиме. Предположим, вы хотите создать базу данных с именем test.fdb и сохранить ее в каталоге с именем data на вашем диске D:

Важно

В операторе CREATE DATABASE строка пути, имя пользователя и пароль обязательны. Это отличается от оператора CONNECT.

Если вы запускаете Classic Server в Linux и не начинаете путь к базе данных с имени хоста, будет предпринята попытка создания файла базы данных с использованием вашей учетной записи Linux в качестве владельца. Это может быть или не быть тем, что вы хотите (подумайте о правах доступа, если вы хотите, чтобы другие могли подключаться). Если вы добавите localhost: к пути, серверный процесс (с Firebird 1.5, обычно работающий как firebird ) создаст файл и станет его владельцем.

Если вы запускаете Classic Server в Windows, вы должны указать имя хоста (которое может быть localhost ) и полный путь, иначе создание не удастся.

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

Чтобы убедиться, что там действительно есть база данных, введите следующий запрос:

Экран заполнится большим объемом данных! Этот запрос выбирает все строки в системной таблице, где Firebird хранит метаданные для таблиц. «Пустая» база данных не пуста — она содержит базу данных, которая будет заполняться метаданными, когда вы начнете создавать объекты в своей базе данных.

Чтобы вернуться к командной строке, введите

Дополнительную информацию о isql см. в разделе Использование Firebird, глава 10: Интерактивная утилита SQL (isql).

SQL Firebird

Каждая система управления базами данных имеет свои особенности в способах реализации SQL. Firebird более строго придерживается стандарта SQL, чем любая другая СУБД, за исключением, возможно, своего «двоюродного брата» InterBase®. Разработчики, переходящие с продуктов, менее соответствующих стандартам, часто ошибочно полагают, что Firebird причудлив, тогда как многие из его кажущихся причуд вовсе не причудливы.

Деление целого числа на целое

Firebird соответствует стандарту SQL, усекая результат (частное) целочисленного/целочисленного вычисления до следующего меньшего целого числа. Это может привести к странным результатам, если вы об этом не знаете.

Например, это вычисление верно в SQL:

Если вы обновляете СУБД, которая преобразует целочисленное/целочисленное деление в частное с плавающей запятой, вам потребуется изменить все затронутые выражения, чтобы использовать числовой тип с плавающей запятой или масштабированный числовой тип для делимого, делителя или обоих.

Например, приведенный выше расчет можно изменить таким образом, чтобы получить ненулевой результат:

Читайте также: