gpt4 book ai didi

python - SQLAlchemy 查询,其中列是另一个字符串的子字符串

转载 作者:太空宇宙 更新时间:2023-11-04 09:57:28 25 4
gpt4 key购买 nike

这个问题类似于SQLAlchemy query where a column contains a substring ,但反过来说:我正在尝试查询包含字符串的列,该字符串是另一个给定字符串的子字符串。我怎样才能做到这一点?

这是使用 ORM 设置数据库的代码示例:

from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from sqlalchemy.sql import exists

engine = create_engine('sqlite:///:memory:')
Base = declarative_base()

class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
url = Column(String)
fullname = Column(String)

Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()
session.add_all([
User(url='john', fullname='John Doe'),
User(url='mary', fullname='Mary Contrary')
])

session.commit()

以下作品:

e = session.query(exists().where(User.url == 'john')).scalar()

e 的值为 True。但是,我想做类似的事情

e = session.query(exists().where(User.url in 'johndoe')).scalar()

其中in是Python的string类型的__contains__方法意义上的。这可能吗?

最佳答案

这就像(嘿)链接的问题,除了你把它转过来:

SELECT ... WHERE 'johndoe' LIKE '%' || url || '%';

如果你的表中有特殊字符,你需要小心转义:

SELECT ... WHERE 'johndoe' LIKE '%' || replace(replace(replace(url, '\', '\\'), '%', '\%'), '_', '\_') ESCAPE '\';

在 SQLAlchemy 中:

escaped_url = func.replace(func.replace(func.replace(User.url, "\\", "\\\\"),
"%", "\\%"),
"_", "\\_")
session.query(... .where(literal("johndoe").like("%" + escaped_url + "%", escape="\\")))

注意 Python 中的转义反斜杠。

关于python - SQLAlchemy 查询,其中列是另一个字符串的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45218129/

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