SQLAlchemy ORM基于相关对象的插入

时间:2012-10-30 14:56:08

标签: python orm sqlalchemy

这是一个新手问题。我是ORM的新手,我想知道以下是否可行:

假设我有一个“用户”表,其中包含三个字段:“id”,“user_name”和指向表“countries”的外键“country_id”

Tables Relation

现在,如果我想插入一个新用户,我首先在“countries”表(例如11)中查找国家的id,​​然后创建User的实例(声明性基础对象)

new_user = User('Johnny', 11)
session.add(new_user)

我想知道的是,如果可以直接添加新用户,只传递国家/地区名称......就像这样:

new_user = User('Johnny', Country('Spain')) # Note the country instance
session.add(new_user)

我尝试过这样的事情,但我得到的最好结果是ORM试图插入另一个名为西班牙的国家。

提前致谢!!

1 个答案:

答案 0 :(得分:4)

假设数据库中已插入Spain ,您需要以下内容:

new_user = User(name='Johnny', country_id=session.query(Country).filter_by(name='Spain').one().id)

更清晰的版本是:

country = session.query(Country).filter_by(name='Spain').one()
new_user = User(name='Johnny', country_id=country.id)

如果您定义了User.country relationship,则可以这样做:

country = session.query(Country).filter_by(name='Spain').one()
new_user = User(name='Johnny', country=country)

如果User.country关系定义了users backref关系(默认情况下会映射到list),您也可以这样做:

country = session.query(Country).filter_by(name='Spain').one()
country.users.add(User(name='Johnny'))