django-pyodbc并调用存储过程

时间:2017-05-11 16:46:38

标签: django stored-procedures django-pyodbc

我正在Windows 10上测试我的代码。我有一个需要在远程SQL Server数据库上调用存储过程的Django应用程序。这是来自settings.py的DATABASES片段:

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。 想法?

1 个答案:

答案 0 :(得分:3)

这是修复,只需将参数周围的括号更改为方括号:

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

我通过反复试验找到了这个。