0
在official Flask documentation for declarative use of SQLalchemy下面的文檔片斷用於:SQLalchemy,爲什麼瓶設置Base.query?
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
爲每個數據庫操作。現在我已經玩了一下,並發現,在交互式會話或純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
將不會更容易?
(附註:這是所有的Python 3.6)
哇,現在有道理。嘿,這就是我總是使用'db_session.query'得到的結果。非常感謝。 – grochmal