2013-02-24 5 views
0

advice에서 Sqlalchemy 작성자가 SQL Expression Language을 사용하여 데이터의 초기 대량 삽입을 작성하려고합니다. 자세한 내용은을 참조하십시오.SQL 식 언어를 사용하여 다 대다 관계를 작성하는 방법

이 자습서에서는 사용자와 주소 간의 일대 다 관계의 예를 가정합니다. 그들은 executemany() 메소드의 사용에 의해 관계를 만들 :

>>> conn.execute(addresses.insert(), [ 
... {'user_id': 1, 'email_address' : '[email protected]'}, 
... {'user_id': 1, 'email_address' : '[email protected]'}, 
... {'user_id': 2, 'email_address' : '[email protected]'}, 
... {'user_id': 2, 'email_address' : '[email protected]'}, 
... ]) 
INSERT INTO addresses (user_id, email_address) VALUES (?, ?) 
((1, '[email protected]'), (1, '[email protected]'), (2, '[email protected]'), (2, '[email protected]')) 
COMMIT 
<sqlalchemy.engine.ResultProxy object at 0x...> 

어떻게 지금 내 디자인에 내가 여러 대다 관계를 가지고있다. 하나는 사용자와 조직 사이입니다. 내가 그래서

# 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? 

Flask-Sqlalchemy.을 사용하고 내 질문에 내 코드뿐만 아니라 내 타이틀에 포함되어 있습니다. SQL 표현 언어를 사용하여 다 대다 관계를 구축하려면 어떻게해야합니까?

답변

0

ORM을 사용하여 다 대다 관계를 포함하여 모든 것을 정의해야합니다. ORM은 SQL 표현식 언어의 최상단에 있습니다. 따라서 대량 삽입이 필요한 경우에는 insert()과 함께 기본 Table 개체를 사용하지만 다른 작업을 수행하는 경우 일반 ORM 패턴을 사용합니다.