我試圖修補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,我知道如果我知道它會是如此混亂。
任何幫助非常感謝。