gpt4 book ai didi

python - 如何将sqlalchemy查询的绑定(bind)参数作为字典获取?

转载 作者:行者123 更新时间:2023-12-04 11:34:27 24 4
gpt4 key购买 nike

我知道有一种方法可以从任何 sqlalchemy 查询对象打印实际的 sql 查询。但是,我想将查询用作参数化形式,而不呈现参数的值。

例如,打印的查询如下所示。

SELECT "user".id AS user_id, "user".hashed_pw AS user_hashed_pw, 
"user".name AS user_name, "user".tel AS user_tel, "user".email AS user_email,
"user".created_time AS user_created_time FROM "user"
WHERE "user".name = :name_1 AND "user".age < :age_1

我将 name_1 作为 'john' 传递,age_1 作为 30 传递,但我不知道如何获取 name_1 和 age_1 的值。
我想要一本像 {'name_1':'john', 'age_1':30} 这样的字典。

我怎样才能做到这一点?

最佳答案

当一个 ORM 查询被编译时,它变成了 sqlalchemy.engine.Compiled .它有 statement属性是 sqlalchemy.sql.expression.ClauseElement其中有 params 属性。

In [3]: query = session.query(User).filter(User.age > 18, User.name == 'joe')
...: query.statement.compile().params
Out[3]: {'age_1': 18, 'name_1': 'joe'}
以及典型的 SQLAlchemy ORM 样板以确保完整性。
In [1]: import sqlalchemy as sa
...: from sqlalchemy.ext.declarative import declarative_base
...: from sqlalchemy.sql import func
...:
...: Base = declarative_base()
...:
...: class User(Base):
...:
...: __tablename__ = 'user'
...:
...: id = sa.Column(sa.Integer, primary_key=True)
...: age = sa.Column(sa.Integer)
...: hashed_pw = sa.Column(sa.String)
...: name = sa.Column(sa.String)
...: tel = sa.Column(sa.String)
...: email = sa.Column(sa.String)
...: created_time = sa.Column(sa.DateTime, server_default=func.now())

In [2]: engine = sa.create_engine('sqlite://')
...: Base.metadata.create_all(engine)
...: Session = sa.orm.sessionmaker(bind=engine)
...: session = Session()
...:
...: user1 = User(age=20, name='joe')
...: user2 = User(age=22, name='jon')
...: session.add_all([user1, user2])
...: session.commit()

关于python - 如何将sqlalchemy查询的绑定(bind)参数作为字典获取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37373411/

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