Соединение Sybase с Flask SQLAlchemy

#python #sqlalchemy #sybase #sqlalchemy-sybase

#python #sqlalchemy #sybase #sqlalchemy-sybase

Вопрос:

Я пытаюсь подключить базу данных Sybase к flask SQLAlchemy, используя ODBC-соединение.

Моя строка подключения: ‘SQLALCHEMY_DATABASE_URI’ = «sybase pyodbc://username:passw@rd@host:port/dbname?driver=Adaptive Сервер Предприятие»

Получение этой ошибки :

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

Второй метод :

 con = pyodbc.connect(server=server ,port=port ,username=username ,password=password ,driver=driver)
 

Теперь соединение работает отлично с теми же данными о соединении.

Может ли кто-нибудь помочь мне в создании URL-адреса строки подключения и помочь мне исправить это. Потому что я хочу использовать «Объект БД» вместо «Объекта курсора».

Ответ №1:

Как указано на вики-странице Getting Connected, «Соединения с именем хоста» не поддерживаются. Вы можете либо создать DSN ODBC, либо использовать строку подключения pyodbc с прямым сквозным подключением ODBC:

 import urllib
from sqlalchemy import create_engine
connection_string = (
    'DRIVER=SAP ASE ODBC driver;'
    'SERVER=centos7-vm01;'
    'PORT=5000;'
    'UID=scott;PWD=tiger;'
    'DATABASE=mydatabase;'
    'charset=utf8;'
)
connection_uri = f"sybase pyodbc:///?odbc_connect={urllib.parse.quote_plus(connection_string)}"
engine = create_engine(connection_uri)
 

Комментарии:

1. Огромное спасибо за быстрый ответ. Я нашел подходящую для меня. Опубликуйте это здесь . Приветствия !!

Ответ №2:

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

Ошибка с недопустимым номером порта также будет исправлена с помощью этого блока кода .

Код здесь :

 import urllib
connection_string = (
    'DRIVER=Adaptive Server Enterprise;'
    'SERVER=server;'
    'PORT=port;'
    'UID=username;PWD=password;'
    'DATABASE=dbname;'
)
connection_uri = f"sybase pyodbc:///?odbc_connect={urllib.parse.quote_plus(connection_string)}"

SQLALCHEMY_DATABASE_URI = connection_uri # connection string for SQLALchemy 
 

Этот код является лучшим решением.