使用SQLAlchemy ORM自动将临时对象添加到会话

时间:2017-05-27 18:16:43

标签: python orm sqlalchemy

我正在使用SQLAlchemy和ORM映射器。

假设我有一个Url类,它指向DomainName这样的类:

class Url(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    path = db.Column(db.String(2083))    
    domain_id = db.Column(db.Integer, db.ForeignKey("domain_name.id"))
    domain_name = db.relationship("DomainName")

根据我的经验,似乎如果我同时创建UrlDomainName,则只需将一个添加到会话并提交,另一个也会持久保存到数据库。类似的东西:

domain = DomainName("www.stackoverflow.com")
url = Url("/questions/ask", domain)
session.add(url)
session.commit(url)

似乎使用这种方法可以节省一些代码行,特别是在创建对象需要创建相关对象的小图的情况下。

事实上,即使这个例子也可以通过在Url构造函数中创建DomainName对象而不是在外部创建它,并将其作为参数传递给Url构造函数来简化。

但这是一个好习惯吗?或者,将每个对象单独添加到会话中会更好吗?

1 个答案:

答案 0 :(得分:0)

注意:文档确认向会话添加一个对象,将通过级联添加其他相关内容:http://docs.sqlalchemy.org/en/latest/orm/tutorial.html#working-with-related-objects