2017-05-11 6 views
1

Ich teste meinen Code unter Windows 10. Ich habe eine Django-Anwendung, die eine gespeicherte Prozedur in einer entfernten SQL Server-Datenbank aufrufen muss. Hier ist die Datenbanken von settings.py Snippet:django-pyodbc und Aufruf einer gespeicherten Prozedur

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', 
    }, 
}, 

}

Hier ist ein Code-Schnipsel aus meiner Sicht ist:

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

Wenn ich die cursor.execute Anweisung ausführen bekomme ich diesen Fehler:

django.db.utils.DatabaseError: ('The SQL contains 1 parameter markers, but 36 parameters were supplied', 'HY000')

Mein Parameter, ID, ist eine GUID. Gedanken?

Antwort

2

Hier ist der fix, verändert einfach die Klammern die Parameter umgebenden Klammern zum Quadrat:

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

ich dies durch Versuch und Irrtum gefunden.

Verwandte Themen