SQLAlchemy自动创建条目如果不作为外键存在

时间:2015-06-11 23:59:03

标签: python mysql sqlalchemy

我有大量.create()次呼叫依赖于另一个表格中的ForeignKeyUsers)。但是,在实际创建用户的代码中没有任何意义。

是否有办法在SQLAlchemy中的另一个表上指定为每个外键创建的Users条目?

例如:

class Rr(db.Model):
  __tablename__ = 'rr'
  id = db.Column(db.Integer, primary_key=True)
  submitter = db.Column(db.String(50), db.ForeignKey('user.username'))

class User(db.Model):
  __tablename__ = 'user'
  username = db.Column(db.String, primary_key=True)

所以如果我调用Rr(id, submitter=John),是否有办法在用户表中创建John条目(如果它尚不存在)?

我知道我可以围绕.create()方法创建一个包装器,以便它检查submitter并创建一个如果它不存在但是这看起来很多,因为有大量的模型希望自动创建Users

1 个答案:

答案 0 :(得分:0)

我无法想到任何执行你所要求的orm或sql实现,但是有一些东西可以有效地完成你在这个SO答案中所描述的内容:Does SQLAlchemy have an equivalent of Django's get_or_create?

基本上从数据库中获取用户(如果存在),如果它没有创建它。

此方法的唯一缺点是您需要执行2次查询而不是1次查询,但我认为没有办法在一个查询中执行您所查找的内容