在1个session.commit()中从sqlalchemy ORM插入多个相关表

时间:2017-07-16 14:55:37

标签: python mysql orm sqlalchemy flask-sqlalchemy

我有3张表格如下:

+----A----+  +----B----+  +----C----+
|id_a   PK|  |id_b   PK|  |id_c   PK|
|other1   |  |id_a   FK|  |id_a   FK|
|other2   |  |other3   |  |other4   |
+---------+  +---------+  +---------+

使用sqlalchemy ORM:

class Model_A(db.Model):
    __tablename__ = "A"

    id_a = db.Column(db.Integer, primary_key=True, autoincrement=True)
    other1 = db.Column(db.String)
    other2 = db.Column(db.String)

    # relationships
    rel_B= db.relationship('Model_B', backref='A', lazy='dynamic')
    rel_c = db.relationship('Model_C', backref='A', lazy='dynamic')

    @orm.reconstructor
    def init_on_load(self):
        # private
        pass

    def __init__(self):
        # private
        pass

    def input_data(self):
        # how do i input data to all of the 3 tables in 1 db.session.commit()


class Model_B(db.Model):
    __tablename__ = "B"

    id_b = db.Column(db.Integer, primary_key=True, autoincrement=True)
    id_a= db.Column(db.Integer, db.ForeignKey('A.id_a'))
    other3 = db.Column(db.String)

    @orm.reconstructor
    def init_on_load(self):
        # private
        pass

    def __init__(self):
        # private
        pass

class Model_C(db.Model):
    __tablename__ = "C"

    id_c = db.Column(db.Integer, primary_key=True, autoincrement=True)
    id_a= db.Column(db.Integer, db.ForeignKey('A.id_a'))
    other4 = db.Column(db.String)

    @orm.reconstructor
    def init_on_load(self):
        # private
        pass

    def __init__(self):
        # private
        pass
表格C中的

*字段other4将作为新插入的id_a *

插入

我尝试将数据作为1个活动插入到这些表中。 以下是我的所作所为:def input_data来自class Model_A

def input_data(self):
    try:
        self.rel_B.append(Model_B(other3='some data'))
        db.session.add(self)
        db.session.commit()
        return {'status': True, 'data': {'message': 'Some Message'}}
    except Exception as e:
        log.info('>>>>> Exception: %s <<<<<', e)
        return {'status': False, 'message': e}

    input_data_to_c()

def input_data_to_c(self):
    try:
        self.rel_C.append(Model_C(other4=self.id_a))
        db.session.add(self)
        db.session.commit()
        return {'status': True, 'data': {'message': 'Some Message'}}
    except Exception as e:
        log.info('>>>>> Exception: %s <<<<<', e)
        return {'status': False, 'message': e}

上面的代码是有效的,但我意识到这里有2个提交。

的问题:

有没有办法在1个session.com中使用sqlalchemy ORM插入多个数据库?

以及如何将新插入的ID插入另一列(在我的上面是other4

干杯,

0 个答案:

没有答案