1

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

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

表关系

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

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

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

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

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

提前致谢!!

4

1 回答 1

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.countryusers backref关系(默认情况下将映射到 a list),您还可以执行以下操作:

country = session.query(Country).filter_by(name='Spain').one()
country.users.add(User(name='Johnny'))
于 2012-10-30T15:19:36.200 回答