2011-11-24 22 views
13

Trong user_models.py, tôi có điều này:Trong SQLAlchemy, làm cách nào để tạo mối quan hệ ForeignKey trên 2 tệp .py khác nhau?

class Users(Base): 
    __tablename__ = 'account_users' 
    id = Column(Integer, primary_key = True) 
    username = Column(String(255), nullable=False)  
Base.metadata.create_all(engine) 

Khi tôi chạy này, tôi tạo ra một bảng dùng.

Mở tập tin khác của tôi, groups_models.py, tôi có điều này:

class Groups(Base): 
    __tablename__ = 'personas_groups' 
    id = Column(Integer, primary_key = True) 
    user_id = Column(Integer, ForeignKey('account_users.id')) #This creates an error!!! 
    user = relationship('Users') #this probably won't work. But haven't hit this line yet. 

Base.metadata.create_all(engine) 

Vì vậy, như bạn thấy, tôi muốn đặt một-to-one nhiều mối quan hệ từ các nhóm -> người sử dụng.

Nhưng khi tôi chạy groups_models.py ... Tôi nhận được lỗi này:

sqlalchemy.exc.NoReferencedTableError: Foreign key associated with column 'personas_groups.user_id' could not find table 'account_users' with which to generate a foreign key to target column 'id' 

Nếu tôi đặt hai bảng với nhau trong một tập tin, tôi chắc chắn rằng nó có thể làm việc ... nhưng vì tôi chia nó vào 2 tập tin (mà tôi hoàn toàn phải) ... Tôi không biết làm thế nào để làm cho mối quan hệ ForeignKey làm việc nữa?

Trả lời

20

Hãy thử điều này

basetest.py

from sqlalchemy import create_engine, ForeignKey 
from sqlalchemy.ext.declarative import declarative_base 
from sqlalchemy.orm import relationship, backref 
from sqlalchemy import Column, Integer, String 
from sqlalchemy import Table, Text 

engine = create_engine('mysql://test:[email protected]/test1', 
        echo=False) 

Base = declarative_base() 

user_models.py

from sqlalchemy import Column, Integer, String 
from sqlalchemy import Table, Text 


#Base = declarative_base() 
from basetest import Base 

class Users(Base): 
    __tablename__ = 'account_users' 
    __table_args__ = {'extend_existing':True} 
    id = Column(Integer, primary_key = True) 
    username = Column(String(255), nullable=False)  

Base.metadata.create_all(engine) 

groups_models.py

from sqlalchemy import create_engine, ForeignKey 
from sqlalchemy.ext.declarative import declarative_base 
from sqlalchemy.orm import relationship, backref 
from sqlalchemy import Column, Integer, String 
from sqlalchemy import Table, Text 

from basetest import Base 
#Base = declarative_base() 
from test1 import Users 

class Groups(Base): 
    __tablename__ = 'personas_groups' 
    __table_args__ = {'extend_existing':True} 
    id = Column(Integer, primary_key = True) 
    user_id = Column(Integer, ForeignKey('account_users2.id')) #This creates an error!!! 
    user = relationship(Users) #this probably won't work. But haven't hit this line yet. 

Base.metadata.create_all(engine) 

Hãy chắc chắn rằng bạn có sa tôi Base để tạo tất cả các bảng có liên quan.

+3

Đảm bảo rằng bạn có cùng một Cơ sở để tạo tất cả các bảng có liên quan !!!!! Tôi lãng phí nửa ngày vì lý do đó: / –

Các vấn đề liên quan