2015-06-11 2 views
0

У меня есть большое количество звонков .create(), которые полагаются на ForeignKey в другой таблице (Users). Однако в коде нет никакого смысла, когда я фактически создаю пользователей.SQLAlchemy автоматически создает запись, если не существует как внешний ключ

Есть ли способ для записи Users, созданный для каждого внешнего ключа, указан в другой таблице в SQLAlchemy?

Например:

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 быть созданы автоматически ,

ответ

0

Я не могу думать ни о каком ОРМ или SQL реализации, который делает то, что вы просите, но есть что-то, что эффективно выполняет то, что вы стремитесь сделать описано в этом SO ответ: Does SQLAlchemy have an equivalent of Django's get_or_create?

в основном получить пользователя из БД если он существует, если он его не создает.

Единственная нижняя сторона этого метода заключается в том, что вам нужно будет сделать 2 запроса вместо одного, но я не думаю, что есть способ сделать то, что вы ищете, в одном запросе