这是一个新手问题。我是ORM的新手,我想知道以下是否可行:
假设我有一个“用户”表,其中包含三个字段:“id”,“user_name”和指向表“countries”的外键“country_id”
现在,如果我想插入一个新用户,我首先在“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试图插入另一个名为西班牙的国家。
提前致谢!!
答案 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'))