django-pyodbc и вызов хранимой процедуры

Я тестирую свой код в Windows 10. У меня есть приложение Django, которому нужно вызвать хранимую процедуру в удаленной базе данных SQL Server. Вот фрагмент базы данных из settings.py:

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'db1',
    'HOST': 'mycompany.com',
    'PORT': '3306',
    'USER': 'user',
    'PASSWORD': 'pw',
},
'ss': {
    'ENGINE': 'django_pyodbc',
    'NAME': 'db2',
    'HOST': 'myserver\SQLEXPRESS',
    'USER': 'myuser',
    'PASSWORD': 'mypw',
    'PORT': '1433',
    # 'DRIVER': 'SQL Server',
    'OPTIONS': {
        'driver_supports_utf8': True,
        'host_is_server': True,  # must be True for remote db
        'autocommit': True,
        'unicode_results': True,
        'extra_params': 'tds_version=8.0',
    },
},

}

Вот фрагмент кода с моей точки зрения:

    cursor = connections['ss'].cursor()
    cursor.execute("{call dbo.mysproc(?)}", (id))

Когда я выполняю инструкцию cursor.execute, я получаю эту ошибку:

django.db.utils.DatabaseError: («SQL содержит 1 маркер параметра, но было предоставлено 36 параметров», «HY000»)

Мой параметр id — это GUID. Мысли?


person Phil O    schedule 11.05.2017    source источник


Ответы (1)


Вот исправление, просто изменили круглые скобки, окружающие параметр, на квадратные скобки:

cursor.execute("{call dbo.mysproc(?)}", [id])

Я нашел это методом проб и ошибок.

person Phil O    schedule 12.05.2017