如何访问SQLAlchemy automap?

时间:2018-03-12 13:57:08

标签: python sqlalchemy

我正在使用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" ) )

1 个答案:

答案 0 :(得分:1)

集合关系的default naming scheme是:

return referred_cls.__name__.lower() + "_collection"

所以假设你有一个模型类addresses,那么你的关系应该是

User.addresses_collection

如果您希望更改此行为,请将您自己的实现作为name_for_collection_relationship=关键字参数传递给AutomapBase.prepare()