python - Django 不像 python 那样使用 pyodbc

标签 python django pyodbc

我有一个使用 pyodbc 读取 2005 sql server 数据库的 python 脚本:

import pyodbc
con = pyodbc.connect('DRIVER={SQL Server};SERVER=servername;DATABASE=schema;UID=user;PWD=pass')
cursor = con.cursor()
cursor.execute(str.format("SELECT id FROM schema.dbo.mytable WHERE num = {0}", foo.num)

这很好用。

当我尝试使用相同的参数在 django 项目设置中配置数据库时,我无法从同一数据库读取表。

'second_db': {
        'ENGINE': 'sql_server.pyodbc',
        'NAME': 'schema',
        'USER': 'user',
        'PASSWORD': 'pass',
        'HOST': 'servername',

        'OPTIONS': {
            'driver': 'SQL Server',
        },
    },

django 项目工作区中的某个位置:

from django.db import connection
cursor = connection.cursor()
cursor.execute(str.format("SELECT id FROM schema.dbo.mytable WHERE num = {0}", obj.num)

我得到:

[42S02] [Microsoft][SQL Server Native Client 11.0][SQL Server]Invalid object name 'schema.dbo.mytable'. (208) (SQLExecDirectW)

谁能帮我看看两者有什么区别? Django 运行在我运行脚本的同一台机器上,所以我相信这不是权限问题...

我想使用 django 连接而不是定义标准游标,因为我更喜欢将所有数据库设置放在 django 设置中,而不是分散在代码中。

最佳答案

Django 的执行格式略有不同。试试这个?

cursor.execute("SELECT id FROM schema.dbo.mytable WHERE num = %s", [obj.num])

这还将消除可能的 SQL 注入(inject)攻击媒介。您可能还想更改 pyodbc 查询以使用绑定(bind)参数:

cursor.execute("SELECT id FROM schema.dbo.mytable WHERE num = ?", foo.num)

祝你好运!

关于python - Django 不像 python 那样使用 pyodbc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45630002/

相关文章:

python - 打印字符串时出现 SageMathCell ValueError(有时)

javascript - 使用 Javascript 部分在 HTML 模板中获取 Django 变量

python - 使用最新的 Graphite 烯和 Graphite 烯-django版本时导入(无法从 'ResolveInfo' 导入名称 'graphql' )错误

python - 使用 PYODBC 和 FreeTDS 从 SQL Server 检索记录

python - 使用cython来早期类型化类属性

python - 从函数添加 driver.get() 值时,Selenium 参数无效

python - Matplotlib 将颜色图 tab20 更改为具有三种颜色

Django 休息注册

sql-server - 将存储过程选择结果读入 pandas 数据帧

Python 列表无法识别数据库表中的值