在Sqlalchemy创建者的advice上,我正在尝试使用SQL Expression Language编写我的初始批量数据插入。有关详细信息,请参阅。
本教程涵盖了我假设的用户和地址之间一对多关系的示例。他们通过使用executemany()方法创建关系:
>>> conn.execute(addresses.insert(), [
... {'user_id': 1, 'email_address' : 'jack@yahoo.com'},
... {'user_id': 1, 'email_address' : 'jack@msn.com'},
... {'user_id': 2, 'email_address' : 'www@www.org'},
... {'user_id': 2, 'email_address' : 'wendy@aol.com'},
... ])
INSERT INTO addresses (user_id, email_address) VALUES (?, ?)
((1, 'jack@yahoo.com'), (1, 'jack@msn.com'), (2, 'www@www.org'), (2, 'wendy@aol.com'))
COMMIT
<sqlalchemy.engine.ResultProxy object at 0x...>
在我的设计中,我有多个多对多的关系。一个在用户和组织之间。注意我正在使用Flask-Sqlalchemy.
# assuming a relationship like:
# organizations = db.Table('organizations',
# db.Column('organization_id', db.Integer, db.ForeignKey('organization.id')),
# db.Column('user_id', db.Integer, db.ForeignKey('user.id')))
# class User(db.Model):
# ...
# organizations = db.relationship('Organization', secondary=organizations,
# backref=db.backref('users', lazy='dynamic'))
# class Organization(db.Model):
# ...
def db_reset():
# lets reset it
db.drop_all()
db.create_all()
# establish our connection
engine = create_engine(SQLALCHEMY_DATABASE_URI)
conn = engine.connect()
# load in our users
user_insert = User.__table__insert()
for user in users: # users is a list of named tuples
conn.execute(user_insert, name=user.name, role=user.role,
organizations= [orgA,orgB,...etc] # how do i do this?
所以我的问题包含在我的代码和标题中。如何在使用SQL表达式语言时建立多对多的关系?
答案 0 :(得分:0)
您当然应该使用ORM定义所有内容,包括您的多对多关系。 ORM位于SQL表达式语言之上。因此,对于需要进行批量插入的一个用例,您可以将基础Table
对象与insert()
结合使用,但是当您执行其他操作时,您会坚持使用常规ORM图案。