0

Sqlalchemyの作成者からのアドバイスを受けて、 SQL式言語を使用してデータの最初の一括挿入を書き込もうとしてい ます。詳細はをご覧ください。

チュートリアルでは、ユーザーとアドレスの間の1対多の関係の例として私が想定していることについて説明します。それらは、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...>

しかし、私のデザインでは、多対多の関係がいくつかあります。1つはユーザーと組織の間にあります。私は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式言語を使用して多対多の関係を構築するにはどうすればよいですか?

4

1 に答える 1

0

ORM を使用して、多対多の関係を含め、すべてを定義する必要があります。ORM は SQL 式言語の上に乗っています。したがって、一括挿入を行う必要がある 1 つのユース ケースでは、基になるTableオブジェクトを と組み合わせて使用insert()​​しますが、それ以外のことを行う場合は、通常の ORM パターンを使用します。

于 2013-02-24T18:42:59.180 に答える