[FreeTDS][SQL Server]SQL Anywhere Ошибка -265: Процедура 'SERVERPROPERTY' не найдена

Я пытаюсь подключиться к базе данных sybase с помощью pyodbc.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    },
    'mssql_database': {
        'ENGINE': 'django_pyodbc',
        'NAME': 'blabla',
        'USER': 'blabla',
        'PASSWORD': 'blabla',
        'HOST': '10.65.1.20',
        'PORT': '1433',
        'OPTIONS': {
            'driver': 'FreeTDS',
            'host_is_server': True,
        },
    },
    'sybase_database': {
        'ENGINE': 'django_pyodbc',
        'NAME': 'blabla',
        'USER': 'blabla',
        'PASSWORD': 'blabla',
        'HOST': '10.60.1.6',
        'PORT': '2638',
        'OPTIONS': {
            'driver': 'FreeTDS',
            'host_is_server': True,
        },
    },
}

Подключение к mssql_database работает. Но подключение к sybase_database заканчивается сообщением об ошибке: django.db.utils.DatabaseError: ('42000', "[42000] [FreeTDS][SQL Server]SQL Anywhere Error -265: Procedure 'SERVERPROPERTY' not found (504) (SQLExecDirectW)")

$ pip list
Package       Version
------------- -------
Django        1.8
django-pyodbc 1.1.3
pip           21.3.1
pyodbc        4.0.32
setuptools    59.6.0
sqlany-django 1.13
sqlanydb      1.0.11
wheel         0.37.1

Согласно сайту для django-pyodbc, Sybase не поддерживается.

Отслеживание приводит к этому коду, который, похоже, специфичен для SQL Server. Вам придется повозиться, чтобы сделать эту библиотеку совместимой с вашей базой данных... но поскольку вы говорите, что вам не обязательно нужны ORM вещи Django, вы можете абсолютно точно просто подключиться к вторичной базе данных, используя необработанный слой pyodbc, например

import pyodbc

# TODO: move this to `settings`?
CONN_STRING = 'Driver={FreeTDS};Server=10.60.1.6,2638;Database=blabla;uid=blabla;pwd=blabla'


def my_view(request):
    with pyodbc.connect(CONN_STRING) as conn:
        cur = conn.cursor()
        cur.execute('SELECT * FROM test')
        rows = list(cur.fetchall())
    return render(request, 'my_template.html', {'rows': rows})
Вернуться на верх