gpt4 book ai didi

python - 使用 python 的旧式字符串格式时,Django 无法处理 sql 中的 % 符号

转载 作者:行者123 更新时间:2023-12-01 09:24:52 25 4
gpt4 key购买 nike

我正在使用 Django 2.0.5,并且我的(不可更改的)旧版 sqlite 数据库在一些列名称中有 % 符号。

创建表 tbl("name"text, "col1(%)"float);

当我使用 django 模型过滤器时,过滤器值将作为参数应用到带有 % 运算符的 sql 字符串:

'从 tbl 中选择“col1(%)”,其中 name LIKE“%s”' % 'John%'

不幸的是,在这种情况下,Django 没有转义 % 符号(在列名中),这导致字符串格式化选项出现错误。

关于如何解决这个问题有什么建议吗?

编辑:我认为我的问题与https://code.djangoproject.com/ticket/9055有关。 ,问题仅出现在 Django Debug模式下。

这是回溯:

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(%)")

和 View :

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

最佳答案

尝试使用

'从 tbl 中选择“col1(%%)”,其中 name LIKE“%s”' % 'John%'

%%转义为单个。

关于python - 使用 python 的旧式字符串格式时,Django 无法处理 sql 中的 % 符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50510633/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com