gro*_*mal 6 sqlalchemy flask python-3.x
在声明性使用 SQLalchemy的官方 Flask 文档中,使用了以下片段:
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()
Run Code Online (Sandbox Code Playgroud)
现在,我根本不明白最后一行在做什么。即做什么
Base.query = db_session.query_property()
Run Code Online (Sandbox Code Playgroud)
施行。 为什么那条线在那里?
在我的应用程序中,我只是db_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)
Run Code Online (Sandbox Code Playgroud)
这个也是如此:
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)
Run Code Online (Sandbox Code Playgroud)
所以我不知所措。返回的基础对象似乎有一个__setattr__
不允许设置Base.query
.
Base.query
被分配了一个None
?Base
没有query
属性,但是简单地做会不会更容易Base.query = None
?(PS 这都是python 3.6)
uni*_*rio 10
db_session.query_property
是一个描述符,它Query
根据您从中访问它的类返回a 。例如,如果你有
class Foo(Base):
pass
Run Code Online (Sandbox Code Playgroud)
thenFoo.query
是 的简写db_session.query(Foo)
。那么,因为说的毫无意义db_session.query(Base)
,Base.query
自然是None
。
归档时间: |
|
查看次数: |
2331 次 |
最近记录: |