我正在使用SQLAlchemy automap。当我描述结构声明时,我有backref属性:
上述配置在
Address
User
上建立了一个名为User.addresses
的{{1}}个对象。
但是现在使用automap我的代码就像下一个:
engine = create_engine('sqlite:///sql_test.db', echo=True)
Session = sessionmaker(bind=engine)
sess = Session()
Base = automap_base()
Base.prepare(engine, reflect=True)
User = Base.classes.Users
addresses = Base.classes.addresses
answer = sess.query(User).filter(User.id==1).first()
print('type:', type(answer)) # will print: class User
但是我如何才能访问addresses
?我尝试过:answer.addresses
等等,但它没有用。
用户:
CREATE TABLE "Users"(
"id" Integer PRIMARY KEY,
"name" Text,
CONSTRAINT "unique_id" UNIQUE ( "id" ) )
地址:
CREATE TABLE "addresses"(
"id" Integer PRIMARY KEY,
"email" Text,
"user_id" Integer,
CONSTRAINT "lnk_Users_addresses" FOREIGN KEY ( "user_id" ) REFERENCES "Users"( "id" ),
CONSTRAINT "unique_id" UNIQUE ( "id" ) )
答案 0 :(得分:1)
集合关系的default naming scheme是:
return referred_cls.__name__.lower() + "_collection"
所以假设你有一个模型类addresses
,那么你的关系应该是
User.addresses_collection
如果您希望更改此行为,请将您自己的实现作为name_for_collection_relationship=
关键字参数传递给AutomapBase.prepare()
。