django-pyodbc 并调用存储过程

Posted

技术标签:

【中文标题】django-pyodbc 并调用存储过程【英文标题】:django-pyodbc and calling a stored procedure 【发布时间】:2017-05-11 16:46:37 【问题描述】:

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

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

这是我认为的代码 sn-p:

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

当我执行 cursor.execute 语句时,我得到这个错误:

django.db.utils.DatabaseError:('SQL 包含 1 个参数标记, 但是提供了 36 个参数', 'HY000')

我的参数 id 是一个 GUID。 想法?

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

以上是关于django-pyodbc 并调用存储过程的主要内容,如果未能解决你的问题,请参考以下文章

MySQL之存储过程创建和调用

PHP如何调用SQLServer2012的存储过程并获取返回结果集及出参?

mysql创建 存储过程 并通过java程序调用该存储过程

Sybase·调用存储过程并返回结果

如何在另一个插入存储过程期间调用一个插入存储过程并获取其返回的ID?

spring boot并调用存储过程注释或entityManager?