gpt4 book ai didi

python - Flask-SQLAlchemy 查询,其中子字符串在数据库中针对整个字符串

转载 作者:行者123 更新时间:2023-11-29 03:33:51 32 4
gpt4 key购买 nike

对于不耐烦的人,我正在寻找一种方法来执行此查询:SELECT * FROM area WHERE '125122141113166' LIKE CONCAT(area.code, '%') ORDER BY LENGTH(area.code) DESC 来自 Flask-SQLAlchemy 模型。

以下是有关设置的更多信息:我有下表(不相关的字段被丢弃):

+----------------------------------+
|code|location |
+==================================+
|12 |startupzone2 |
+----------------------------------+
|123 |startupzone2subzone3 |
+----------------------------------+
|1234|startupzone2subzone3building4|
+----------------------------------+
|126 |startupzone2subzone6 |
+----------------------------------+
|1287|startupzone2subzone8building7|
+----------------------------------+

我希望能够通过代码找到位置,但提供的搜索字符串格式为“125122141113166”。我可以在开始时使用查询来检索最相关的位置,但我想为此使用 ORM(如果可能)。到目前为止,我已经读到我可以将 match ... against ... 与全文索引一起使用,但是当我尝试在表上创建全文索引时出现错误。目前我正在使用上面的查询从表中提取主键并使用 Area.query.get(pkey) 来获取对象,但我正在寻找更好的方法,如果存在的话。谢谢!

最佳答案

由于我无法确定 Flask-SQLAlchemy 或 SQLAlchemy 是否提供了执行此操作的方法,因此我将以下静态方法添加到我的类中:

@staticmethod
def match(location):
query = "SELECT id FROM rate WHERE {0} LIKE CONCAT(area.code, '%%') ORDER BY LENGTH(area.code) DESC LIMIT 1".format(location)
try:
res = db.engine.execute(query).first()
return None if not res else Area.query.get(res[0])
except SQLAlchemyError as e:
print "Unable to get location for for location code {0}, reason: {1}".format(location, str(e))
return None

我可以将它用作 Area.match(location) 这不是最好的但足以满足我的需求。

关于python - Flask-SQLAlchemy 查询,其中子字符串在数据库中针对整个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26380945/

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