gpt4 book ai didi

python-3.x - SQLalchemy,为什么flask 设置Base.query?

转载 作者:行者123 更新时间:2023-12-03 08:24:37 26 4
gpt4 key购买 nike

official Flask documentation for declarative use of SQLalchemy使用以下剪辑:

from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy.ext.declarative import declarative_base

engine = create_engine('sqlite:////tmp/test.db', convert_unicode=True)
db_session = scoped_session(sessionmaker(autocommit=False,
autoflush=False,
bind=engine))
Base = declarative_base()
Base.query = db_session.query_property()

现在,我根本不明白最后一行在做什么。即什么
Base.query = db_session.query_property()

施行。 为什么那条线在那里?

在我的应用程序中,我只是使用 db_session对于每个数据库操作。现在我玩了一点,发现在交互式 session 或纯 python 脚本的上下文中,该行什么都不执行!

例如,此脚本打印 True
import sqlalchemy as sq
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, scoped_session
eng = sq.create_engine('sqlite://')
Base = declarative_base()
db_session = scoped_session(sessionmaker(bind=eng))
Base.query = db_session.query_property()
Base.query
print(Base.query == None)

这个也是如此:
import sqlalchemy as sq
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, scoped_session
eng = sq.create_engine('sqlite://')
Base = declarative_base(bind=eng) ### the difference is here
db_session = scoped_session(sessionmaker(bind=eng))
Base.query = db_session.query_property()
Base.query
print(Base.query == None)

所以我不知所措。返回的基础对象似乎有一个 __setattr__这将不允许设置 Base.query .
  • 那个任务应该做什么?
  • 以及为什么我的测试结果是 Base.query分配一个 None ?
  • 默认情况下,Base没有 query属性,但如果简单地做 Base.query = None 就不会那么容易了?

  • (P.S.这都是python 3.6)

    最佳答案

    db_session.query_property是一个描述符,返回 Query基于您从中访问它的类。例如,如果你有

    class Foo(Base):
    pass

    然后 Foo.querydb_session.query(Foo) 的简写.然后,因为说 db_session.query(Base)没有意义, Base.query自然是 None .

    关于python-3.x - SQLalchemy,为什么flask 设置Base.query?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42309161/

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