修补Djangopyodb中的错误

2024-06-01 07:03:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试修补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.ConnectionHandlerDATABASES获取引擎,并让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会如此混乱的话,我肯定会坚持使用它们。你知道吗

非常感谢您的帮助。你知道吗


Tags: 文件djangononeformatsqlbaseifis
1条回答
网友
1楼 · 发布于 2024-06-01 07:03:05

我没有访问SQLServer2000安装的权限,但是如果我没记错的话,SQLServer2000使用UCS-2而不是UTF-8编码unicode。您还需要将TDSversion7.1与SQLServer2000、IIRC一起使用。我已经有一段时间没有通过FreeTDS连接到sqlserver2000了,但是在更改django-pyodbc代码之前,可以试试这个吗?你知道吗

'OPTIONS': {
    'host_is_server': True,
    'autocommit': True,
    'unicode_results': True,
    'extra_params': 'tds_version=7.1'
},

django1.6+需要autocommit,这将启用Unicode结果(应该由sqlserver2000转换为UCS-2),并设置正确的TDS版本。YMMV,但我会试一试。你知道吗

相关问题 更多 >