관계 테이블 감지하지 않습니다증류기 내가 M2M 관계에 대한 몇 가지 관련 테이블과 일부 모델을 정의한
from itsdangerous import TimedJSONWebSignatureSerializer
from passlib.hash import bcrypt
from sqlalchemy.ext.declarative import declarative_base
import app
from app import db
Base = declarative_base()
class UserGroupRelationship(Base):
__tablename__ = 'users_groups'
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('users.id'), primary_key=True)
group_id = db.Column(db.Integer, db.ForeignKey('groups.id'), primary_key=True)
class FriendRelationship(Base):
__tablename__ = u'users_friends'
id = db.Column(db.Integer, primary_key=True)
user_left = db.Column(db.Integer, db.ForeignKey('users.id'), primary_key=True)
user_right = db.Column(db.Integer, db.ForeignKey('users.id'), primary_key=True)
class User(db.Model):
__tablename__ = u'users'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50))
email = db.Column(db.String(120), unique=True)
password = db.Column(db.String(120))
# ...
last_login = db.Column(db.DateTime, default=db.func.now())
friends = db.relationship(FriendRelationship,
primaryjoin=id==FriendRelationship.user_left,
backref='friends', lazy='dynamic')
friends_with = db.relationship(FriendRelationship,
primaryjoin=id==FriendRelationship.user_right,
backref='friends_with', lazy='dynamic')
class Group(db.Model):
__tablename__ = u'groups'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50))
users = db.relationship(UserGroupRelationship,
primaryjoin=id==UserGroupRelationship.group_id,
backref='groups', lazy='dynamic')
class Device(db.Model):
''' devices linked to users '''
__tablename__ = u'devices'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50))
uuid = db.Column(db.String(50))
date_added = db.Column(db.DateTime)
user_id = db.Column(db.Integer, db.ForeignKey('groups.id'))
이 db.Model
에서 상속 클래스의 테이블을 생성 않습니다 alembic revision --autogenerate
실행을하지만 내 M2M에 사용되는 테이블 관계.
INFO [alembic.migration] Context impl PostgresqlImpl.
INFO [alembic.migration] Will assume transactional DDL.
INFO [alembic.autogenerate] Detected added table u'groups'
INFO [alembic.autogenerate] Detected added table u'users'
INFO [alembic.autogenerate] Detected added table u'devices'
INFO [alembic.autogenerate] Detected added table u'question'
Generating /Users/rxdazn/w/xxx/xxx-
yyy/migrations/versions/4e47aa7f3050_.py...done
내 alembic.ini
및 env.py
파일은 기본 것들입니다. 나는 내 프로젝트를 가져 오기 만하면된다. __init__.py
이 동작을 일으킬 수있는 아이디어가 있습니까?
모델이'db.Model'에서 상속하는 동안 왜 'Base'에서 연관 테이블을 상속합니까? 그들은 모두 모델이 맞지? – Miguel
@Miguel 나는 관계가 단순한 모델과 다른 것이라고 생각했다. 나는 그들이 모델이되어서는 안된다고 생각했다. 'db.Model'에서 상속받은 것이 내 문제를 해결 한 것 같습니다. 제 질문을 해결 된 것으로 표시 할 수 있도록 작성해주세요. 고마워. (그리고 블로그 포스트에도 감사드립니다.) – rxdazn
many-to-many 관계에는 두 가지 패턴이 있습니다. [기본 문서] (http://docs.sqlalchemy.org/en/rel_0_9/orm/relationships.html#many-to-many)는 연관 테이블에 대해 'Table' 개체를 사용합니다. [고급 기능] (http://docs.sqlalchemy.org/en/rel_0_9/orm/relationships.html#association-object)은 모델을 사용하며 추가 테이블을 연결 테이블에 저장할 수 있다는 장점이 있습니다. 당신은 고급 하나를 사용하는 것,하지만 Flask - SQLAlchemy를 사용하는 경우 모든 모델은'db.Model'에서 상속해야합니다, 당신은 직접 SQLAlchemy로 가지 않아야합니다. – Miguel