gpt4 book ai didi

python - 通过 Django 的 MySQL REGEXP 查询不会返回任何内容,但 MySQL 中的查询工作得很好,有什么想法吗?

转载 作者:行者123 更新时间:2023-11-29 09:37:06 24 4
gpt4 key购买 nike

我目前正在开发一个网站,可以可视化某个 ngram 在给定日期范围内出现的次数,类似于 google 的 ngram 查看器,但针对我的母语。我的论文导师说我们应该实现一个正则表达式查询,返回所有符合给定正则表达式的 ngram。但是,通过 Django 查询会得到一个空结果集,而在 MySQL Workbench 中运行查询会得到我想要的数据。

我尝试使用原始查询和 Model.objects.filter ,如下所示。

def regex(request, regexPattern):
#TO MAKE WORK
if(request.method == 'GET'):
print(regexPattern)
results = Ngram.objects.filter(ngram__regex = regexPattern)
for x in results:
print(x)
sql = "SELECT ngram FROM ngram n WHERE n.ngram REGEXP %s AND n_number = %s"
val = (regexPattern, "1")
with connection.cursor() as cur:
cur.execute(sql, val)
myresult = cur.fetchall()
data = []
#data["ngrams"] = regexPattern
for x in myresult:
print(x)

MySQL 查询是

SELECT ngram
FROM ngram
WHERE ngram REGEXP 'du\w{0,5}' AND n_number = '1'

从 Ngram.objects.filter 的结果集中打印 x 的 for 循环和原始查询都没有打印任何内容,但如果我在数据库中运行此查询,我会得到很多行。这是一个示例

ngram
------
modumo
dulay
dumating
maduwag
dulot
dumi
...
...

有什么想法可以让它在 Django 中工作吗?

编辑:为了在任何人询问之前澄清它,Django已连接到数据库,我可以获得数据,这些数据允许可视化ngram在其他函数中随时间的使用情况。

编辑2:在shell中运行Ngram.objects.filter(ngram__regex=r'du\w{0,5')可以工作并返回数据,但这给我带来了另一个问题。

regexString = 'du\w{0,5}'
Ngram.objects.filter(ngram__regex=r+regexString)

无效,所以我想回答我的问题的另一种方法是如何将 models.objects.filter(field__regex=r'regex') 与变量一起使用

最佳答案

在 django 中进行原始 sql 查询的正确方法是 Model.objects.raw()方法。如果这仍然没有帮助你可以尝试 inspecting the queries找到真正的问题。

对于第二次编辑,只需在字符串定义中添加 r 即可:

regexString = r'du\w{0,5}'
Ngram.objects.filter(ngram__regex=regexString)

关于python - 通过 Django 的 MySQL REGEXP 查询不会返回任何内容,但 MySQL 中的查询工作得很好,有什么想法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57359216/

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