我正在尝试修补this bug,但遇到了问题。django pyodbc是django的SQL Server后端,该错误会导致任何SQL转换为Python3.x中的字节类型,在尝试执行时会引发TypeError(必须是string或unicode)。你知道吗
这是我在我的\应用程序/pyodbc\补丁中的代码/基本.py(该文件夹中的唯一文件):
import django_pyodbc.base
class CursorWrapper(django_pyodbc.base.CursorWrapper):
def format_sql(self, sql, n_params=None):
if n_params is not None:
try:
sql = sql % tuple('?' * n_params)
except:
pass
else:
if '%s' in sql:
sql = sql.replace('%s', '?')
return sql
class DatabaseFeatures(django_pyodbc.base.DatabaseFeatures):
pass
class DatabaseWrapper(django_pyodbc.base.DatabaseWrapper):
pass
我的settings.DATABASES
:
DATABASES = {
'default': {
'ENGINE': 'my_app.pyodbc_patch',
'HOST': '...',
'NAME': '...',
'OPTIONS': {
'host_is_server': True
}
}
}
据我从django源代码所知,django.db.utils.ConnectionHandler
从DATABASES
获取引擎,并让django.db.utils.load_backend
导入其base
模块。然而,我得到的错误是完全一样的,如果我没有应用补丁。这对我来说完全没有意义,因为pyodbc\u patch本身就导入了django\u pyodbc,所以我无法想象错误版本的CursorWrapper.format_sql
会被调用得更早。你知道吗
另一个选择是修复djangoèu pyodbc的本地副本。不幸的是,我只有Python33/Lib/site-packages/django\u-pyodbc-0.2.3-py3.3.egg,我不知道如何编辑egg文件。我真是束手无策。这是我第一次涉足python和django,如果我知道ruby和rails会如此混乱的话,我肯定会坚持使用它们。你知道吗
非常感谢您的帮助。你知道吗
我没有访问SQLServer2000安装的权限,但是如果我没记错的话,SQLServer2000使用UCS-2而不是UTF-8编码unicode。您还需要将TDSversion7.1与SQLServer2000、IIRC一起使用。我已经有一段时间没有通过FreeTDS连接到sqlserver2000了,但是在更改django-pyodbc代码之前,可以试试这个吗?你知道吗
django1.6+需要autocommit,这将启用Unicode结果(应该由sqlserver2000转换为UCS-2),并设置正确的TDS版本。YMMV,但我会试一试。你知道吗
相关问题 更多 >
编程相关推荐