我有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
干杯,