Django在使用python的旧式字符串格式时无法处理sql中的%symbol

Django在使用python的旧式字符串格式时无法处理sql中的%symbol,python,django,string-formatting,Python,Django,String Formatting,我使用的是Django 2.0.5,我的不可更改的旧式sqlite数据库在一些列名中有%symbol 创建表tblname文本,col1%浮点 使用django模型筛选器时,筛选器值将作为参数应用于sql字符串,其中%运算符为: '从tbl中选择col1%,其中的名称类似于%s''%John%' 不幸的是,在这种情况下,Django没有转义列名中的%symbol,这导致字符串格式选项出错 有没有关于如何解决这个问题的建议 编辑:我想我的问题是, 问题只出现在Django调试模式下 以下是回溯:

我使用的是Django 2.0.5,我的不可更改的旧式sqlite数据库在一些列名中有%symbol

创建表tblname文本,col1%浮点

使用django模型筛选器时,筛选器值将作为参数应用于sql字符串,其中%运算符为:

'从tbl中选择col1%,其中的名称类似于%s''%John%'

不幸的是,在这种情况下,Django没有转义列名中的%symbol,这导致字符串格式选项出错

有没有关于如何解决这个问题的建议

编辑:我想我的问题是, 问题只出现在Django调试模式下

以下是回溯:

Traceback (most recent call last):
  File "C:\svn\br_sqlite\camp2\venv\lib\site-packages\django\core\handlers\exception.py", line 35, in inner
    response = get_response(request)
  File "C:\svn\br_sqlite\camp2\venv\lib\site-packages\django\core\handlers\base.py", line 128, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\svn\br_sqlite\camp2\venv\lib\site-packages\django\core\handlers\base.py", line 126, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\svn\br_sqlite\camp2\main\views.py", line 72, in showData
    qs = validateInput(model,batch,version)
  File "C:\svn\br_sqlite\camp2\main\views.py", line 36, in validateInput
    return qs if len(qs) > 0 else None
  File "C:\svn\br_sqlite\camp2\venv\lib\site-packages\django\db\models\query.py", line 254, in __len__
    self._fetch_all()
  File "C:\svn\br_sqlite\camp2\venv\lib\site-packages\django\db\models\query.py", line 1179, in _fetch_all
    self._result_cache = list(self._iterable_class(self))
  File "C:\svn\br_sqlite\camp2\venv\lib\site-packages\django\db\models\query.py", line 53, in __iter__
    results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)
  File "C:\svn\br_sqlite\camp2\venv\lib\site-packages\django\db\models\sql\compiler.py", line 1066, in execute_sql
    cursor.execute(sql, params)
  File "C:\svn\br_sqlite\camp2\venv\lib\site-packages\django\db\backends\utils.py", line 104, in execute
    sql = self.db.ops.last_executed_query(self.cursor, sql, params)
  File "C:\svn\br_sqlite\camp2\venv\lib\site-packages\django\db\backends\sqlite3\operations.py", line 143, in last_executed_query
    print(sql % params)
ValueError: unsupported format character ')' (0x29) at index 3252
示例模型:

class tbl(models.Model):
    name=models.TextField()
    col1=models.TextField(db_column="col1(%)")
还有一个观点:

def test(request):
    a = tbl.objects.filter(name__contains='ab')
    return ""
试用

'从tbl中选择col1%%,其中的名称类似于%s''%John%'


Double%%转义为一个。

但我正在使用django模型过滤器,并希望继续使用它。您可能已经尝试过col1=models.TextFielddb\u column=col1%%