Django 不像 python 那样使用 pyodbc
Django doesn't use pyodbc as python does
我有一个 python 脚本使用 pyodbc 读取 2005 sql 服务器数据库:
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 运行ning 在我 运行 脚本所在的同一台机器上,所以我相信这不是权限问题...
我想使用 django 连接而不是定义标准游标,因为我更喜欢将所有数据库设置都放在 django 设置中,而不是分散在代码周围。
Django 的执行格式略有不同。试试这个?
cursor.execute("SELECT id FROM schema.dbo.mytable WHERE num = %s", [obj.num])
这也将消除可能的 SQL 注入攻击向量。您可能还想更改 pyodbc
查询以使用绑定参数:
cursor.execute("SELECT id FROM schema.dbo.mytable WHERE num = ?", foo.num)
祝你好运!
最后我的问题是我想从辅助数据库打开一个游标,而不是默认的,所以错误就在这里:
from django.db import connection
cursor = connection.cursor()
应该是:
from django.db import connections # instead of connection
cursor = connections['second_db'].cursor() # using the proper db
我有一个 python 脚本使用 pyodbc 读取 2005 sql 服务器数据库:
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 运行ning 在我 运行 脚本所在的同一台机器上,所以我相信这不是权限问题...
我想使用 django 连接而不是定义标准游标,因为我更喜欢将所有数据库设置都放在 django 设置中,而不是分散在代码周围。
Django 的执行格式略有不同。试试这个?
cursor.execute("SELECT id FROM schema.dbo.mytable WHERE num = %s", [obj.num])
这也将消除可能的 SQL 注入攻击向量。您可能还想更改 pyodbc
查询以使用绑定参数:
cursor.execute("SELECT id FROM schema.dbo.mytable WHERE num = ?", foo.num)
祝你好运!
最后我的问题是我想从辅助数据库打开一个游标,而不是默认的,所以错误就在这里:
from django.db import connection
cursor = connection.cursor()
应该是:
from django.db import connections # instead of connection
cursor = connections['second_db'].cursor() # using the proper db