我试图修补this bug并且遇到问题。 django-pyodbc是django的SQL Server后端,并且该错误导致任何sql在python 3.x中被转换为字节类型,当它试图执行时会引发TypeError(必须是字符串或unicode)。修补django-pyodbc中的错误
这里是一个程序my_app/pyodbc_patch/base.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_patch本身导入了django_pyodbc,所以我无法想象CursorWrapper.format_sql
的错误版本更早被调用。
另一种选择是修复我的django_pyodbc的本地副本。不幸的是我只有Python33/Lib/site-packages/django_pyodbc-0.2.3-py3.3.egg,我不知道如何编辑egg文件。我真的在我的智慧结束。这是我第一次进入python和django,并且我会坚持使用ruby和rails,我知道如果我知道它会是如此混乱。
任何帮助非常感谢。