Создать драйвер qoci pyqt5 oracle

Обновлено: 07.07.2024

В Windows 7 я установил Qt Creator и теперь я пытаюсь подключиться к базе данных Oracle. Я установил oracle client и plsql / developer, и все работает отлично. В QT Creator у меня есть ошибка:

QsqlDatabase: драйвер QOCI не загружен

это QT документация не работает для меня Это понятный урок, как это сделать на разных платформах и в разных ситуациях?

Решение

Хорошо. Я нашел решение.

установите INCLUDE =% INCLUDE%; c: \ oracle \ oci \ include

установить LIB =% LIB%; c: \ oracle \ oci \ lib \ msvc

cd% QTDIR% \ src \ plugins \ sqldrivers \ oci

qmake oci.pro

NMAKE

Если вы не используете компилятор Microsoft, замените nmake на make in
линия выше.

но делать или же NMAKE не работает для меня Потому что я не установил Microsoft Visual C ++ на моей машине.

Я сделал инструкцию, как это сделать:

Сначала не забудьте установить исходники qt. Во время проверки установки источники флажок.

затем откройте QT командная строка minGW(начало -> все программы -> qt [версия] -> [версия] -> MinGW [версия] -> Qt [версия] для рабочего стола MinGW [версия]) и перейдите в исходную папку oci:

cd C: \ Qt \ Qt [версия] \ [версия] \ Src \ qtbase \ src \ plugins \ sqldrivers \ oci

  1. затем, как указано в документации, укажите путь и библиотеку OCI (интерфейс вызова Oracle):

set INCLUDE =% INCLUDE%; c: \ app \ user \ product [version] \ client_1 \ oci \ include

установить LIB =% LIB%; c: \ app \ user \ product [version] \ client_1 \ oci \ lib \ msvc

qmake oci.pro

mingw32-макияж

он создаст два .dll-файла для вас qsqloci.dll(выпускная версия) и qsqlocid.dll(отладочная версия)

C: \ Qt \ Qt [версия] \ [версия] \ Src \ qtbase \ Plugins \ sqldrivers

и скопируйте эти файлы в:

C: \ Qt \ Qt [версия] \ [версия] \ MinGW [версия] \ Plugins \ sqldrivers

и ты готов к работе. чтобы проверить соединение, попробуйте этот код:

Другие решения

Вы должны использовать QODBC инстей из QOCI ,

gogagubi ответ хороший, но шаг 4 не работает для меня, потому что установлен INCLUDE а также LIB не работает для mingw32-make ,

Это нужно установить INCPATH а также LIBS в oci.pro или используйте:

Добавьте следующие строки в oci.pro :

чао тутто;
вы можете подключиться к oracle db с драйвером QODBC, если он существует; (по умолчанию в окнах Qt существует) Как показано ниже:

Еще мощнее! Удобно выполнять операции с базой данных в PyQt5!

При программировании графического интерфейса для настольных ПК нам обычно необходимо хранить некоторые данные или информацию о конфигурации локально. Для локального хранения данных мы можем напрямую использовать текстовые файлы, такие как файлы ini, файлы csv, файлы json и т. Д., Или использовать файловые базы данных (например, sqlit3) для хранения.

Поддержка базы данных PyQt5 SQL

Платформа Qt имеет хорошую поддержку программирования SQL, и PyQt5 также унаследовал ее. В PyQt5 подмодуль QtSql обеспечивает поддержку баз данных SQL:

66ede8accb6287d1aa6b216d517100a25156d11d

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

● Уровень драйвера используется для обеспечения функций низкоуровневого соединения между конкретной базой данных и интерфейсом API SQL, включая QSqlDriver, QSqlDriverCreatorBase, QSqlResult;
● Слой SQL API используется для обеспечения доступа к базе данных. Вообще говоря, мы будем использовать QSqlDatabase для установления соединения с базой данных и использовать такие классы, как QSqlQuery, для реализации взаимодействия с базой данных (выполнения операторов SQL). Кроме того, существуют такие классы, как QSqlError, QSqlField, QSqlIndex и QSqlRecord.
● Уровень операций пользовательского интерфейса используется для связывания данных операций с базой данных с соответствующими виджетами данных PyQt и отображения данных и операций в интерфейсе Qt. Эти классы включают: QSqlQueryModel, QSqlTableModel и т. Д.

В этих классах каждый класс имеет свою конкретную цель, среди них:

● QSQL: содержит различные идентификаторы, используемые во всем модуле Qt SQL.
● QSqlDatabase: обрабатывать подключение к базе данных
● QSqlDriver: абстрактный базовый класс для доступа к определенным базам данных SQL
● QSqlDriverCreator: класс шаблона, предоставляет фабрику драйверов SQL для определенных типов драйверов
● QSqlDriverCreatorBase: базовый класс фабрики драйверов SQL
● QSqlError: информация об ошибке базы данных SQL
● QSqlField: обработка полей в таблицах и представлениях базы данных SQL
● QSqlIndex: функция, используемая для управления индексами базы данных и их описания.
● QSqlQuery: методы выполнения и работы с операторами SQL
● QSqlQueryModel: модель данных только для чтения для наборов результатов SQL
● QSqlRecord: инкапсулировать записи базы данных
● QSqlRelationalTableModel: редактируемая модель данных одной таблицы базы данных с поддержкой внешнего ключа
● QSqlResult: абстрактный интерфейс для доступа к данным из конкретной базы данных SQL.
● QSqlTableModel: редактируемая модель данных одной таблицы базы данных

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

Простое использование базы данных в PyQt5

Создать интерфейс UI

Во-первых, мы создаем базовый графический интерфейс через PyQt5. Этот интерфейс состоит из двух частей:

● Уровень кнопок: используется для выполнения операций с базой данных с помощью кнопок;
● Слой отображения базы данных: используется для отображения информации таблиц базы данных;

Borland InterBase Driver

Драйвер интерфейса вызова Oracle

Драйвер ODBC (включает Microsoft SQL Server)

SQLite версии 3 или выше

SQLite версия 2

Borland InterBase Driver

Драйвер интерфейса вызова Oracle

Драйвер ODBC (включает Microsoft SQL Server)

db = QtSql.QSqlDatabase.addDatabase('QSQLITE') db.setDatabaseName('sports.db')

Другие методы класса QSqlDatabase следующие:

setDatabaseName ()

Устанавливает имя базы данных, с которой ищется соединение

setHostName ()

Устанавливает имя хоста, на котором установлена ​​база данных

setUserName ()

Определяет имя пользователя для подключения

Установка пароля()

Устанавливает пароль объекта подключения, если таковой имеется

Подтверждает транзакции и возвращает true в случае успеха

Откат транзакции базы данных

setDatabaseName ()

Устанавливает имя базы данных, с которой ищется соединение

setHostName ()

Устанавливает имя хоста, на котором установлена ​​база данных

setUserName ()

Определяет имя пользователя для подключения

Установка пароля()

Устанавливает пароль объекта подключения, если таковой имеется

Подтверждает транзакции и возвращает true в случае успеха

Откат транзакции базы данных

Класс QSqlQuery обладает функциональностью для выполнения команд SQL и управления ими. Могут быть выполнены как SQL-запросы DDL, так и DML-типа. Наиболее важным методом в классе является exec_ (), который принимает в качестве аргумента строку, содержащую инструкцию SQL для выполнения.

Следующий скрипт создает базу данных SQLite sports.db с таблицей sportsperson, заполненной пятью записями.

Объект QTableModel объявляется следующим образом:

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

QSqlTableModel.OnFieldChange Все изменения будут применены немедленно
QSqlTableModel.OnRowChange Изменения будут применены, когда пользователь выберет другую строку
QSqlTableModel.OnManualSubmit Все изменения будут кэшироваться до тех пор, пока не будет вызвана submitAll () или revertAll ()

пример

Класс QTableView является частью инфраструктуры Model / View в PyQt. Объект QTableView создается следующим образом:

Этот объект QTableView и два виджета QPushButton добавляются в окно QDialog верхнего уровня. Сигнал clicked () кнопки add связан с addrow (), который выполняет insertRow () для таблицы модели.

Слот, связанный с кнопкой удаления, выполняет лямбда-функцию, которая удаляет строку, выбранную пользователем.

У меня возникает эта проблема, когда я пытаюсь подключиться к локальной базе данных mysql с помощью метода QSqlDatabase.addDatabase ().

Я знаю, что есть несколько похожих вопросов, но они не предлагают четких решений, особенно поскольку большинство из них касается C ++, и они предположили, что мы можем документацию Qt, которую я не могу

В частности, я хотел бы знать, какие файлы отсутствуют (.dll, .so, .lib)? где их взять? и где мне их скопировать? в случае Python, а не C ++

Это ошибка, которую я получаю при попытке запустить мой скрипт python:

Я использую Windows 10, MySql 8, Python 3.6, PyQt 5.9 и PyQt-tools 5.9 (я использую эту версию PyQt, потому что я также использую fbs, в руководстве fbs говорится, что он лучше работает с этой версией PyQt5 и Python)

Это полезное утверждение, которое я прочитал в stackoverflow, но оно предназначено для C ++: "" "Помните, что плагин qsqlmysql в основном представляет собой интерфейс qt, который использует методы соединителя mysql-C. Но, к сожалению, этот соединитель не распространяется с Qt, поэтому вы должны предоставить это самостоятельно. "" "

Итак, как я сказал ранее, важно знать, какие файлы отсутствуют (.dll, .so, .lib)? где их взять? и где мне их скопировать?

Пожалуйста, дайте мне знать, если вам понадобится мой сценарий, но он очень простой:

  1. Я пытаюсь подключиться с помощью QSqlDatabase.addDatabase ('QMYSQL')
  2. Создайте экземпляр QSqlTableModel, который использует это соединение с базой данных и задает одну таблицу этой базы данных.
  3. Отобразите эту единственную таблицу в QTableView.

2 ответа

Попробуйте использовать QMYSQL3 как:

Если ваша проблема не решена, вы можете проверить, что вашего файла libmysql.dll нет в вашей исполняемой папке python, и если да, скопируйте файл из python 3.x / lib / site-packages в вашу исполняемую папку python 3.xx . У меня это сработало.

Бинарные файлы, используемые Qt, такие же, как и PyQt5 / PySide2, поскольку они используют один и тот же базовый код, поэтому вам придется скомпилировать плагины.

В этом случае для компиляции плагина mysql вы должны следовать официальному руководству, что вкратце:

  • Установите зависимости, в данном случае mysql-connector-c
  • Установите Qt и инструменты разработки, такие как MSVC в Windows, необходимые для сборки в Ubuntu, XCode в MacOS и т. Д.
  • Загрузите исходный код, в данном случае репозиторий qtbase.
  • Скомпилируйте плагин.

Приведенное выше создает libqsqlmysql.so, qsqlmysql.dll или libqsqlmysql.dylib в зависимости от ОС. Этот файл необходимо вставить в путь:

Вы также должны скопировать зависимости в места, которые устанавливает двоичный файл (чтобы узнать, что вы можете использовать ldd в Linux или OTool в MacOS, в случае Windows просто поместите его рядом со скриптом).

Чтобы упростить задачу, я создал действие github, которое создает двоичные файлы.

В вашем случае это можно резюмировать как:

Загрузите файл mysqlplugin-Windows-Qt5.9 и скопируйте файл. dll по пути, указанному вверху.

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