2017-05-11 128 views
1

我測試在Windows 10,我的代碼,我有需要調用一個遠程SQL Server數據庫存儲過程的Django應用程序。這裏的數據庫從settings.py片段:Django的pyodbc和調用存儲過程

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: ('The SQL contains 1 parameter markers, but 36 parameters were supplied', 'HY000')

我的參數,ID是一個GUID。 想法?通過試驗和錯誤

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

我發現這一點:

回答

2

這裏的修復,只是改變周圍的參數,方括號中的括號內。