Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python alembic没有';t检测关系表_Python_Sqlalchemy_Flask_Alembic - Fatal编程技术网

Python alembic没有';t检测关系表

Python alembic没有';t检测关系表,python,sqlalchemy,flask,alembic,Python,Sqlalchemy,Flask,Alembic,我已经为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 UserGroupRelati

我已经为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'))
运行
alembic revision--autogenerate
会为继承自
db.Model
的类生成表,但不会为用于我的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
文件是默认文件。我只需将模型导入到项目的
\uu init\uuuuuuupy

你知道是什么导致了这种行为吗?

(米格尔在评论中回答了这个问题。如果他发布了这个答案,并且有人在评论中戳我,我会删除这个答案。我发布它只是为了把它标记为答案,因为我有同样的问题,几乎在阅读评论之前离开了页面。)

不要从
Base
继承关联表。所有模型都应继承自
db.Model
,如下所示:

class FriendRelationship(db.Model):
原因是:


多对多关系有两种模式。基本的 将表对象用于关联表。先进的使用 模型,并具有可以在中存储其他列的优点 关联表。您似乎正在使用高级版本,但如果 你正在使用炼金术,那么你所有的模型都应该继承 来自db.Model。你不应该直接去SQLAlchemy


为什么从
Base
继承关联表,而模型从
db.Model
继承?他们都是模型,对吗?@Miguel我认为关系不同于简单的模型。我的意思是我认为他们不应该是模特。从
db.Model
继承似乎解决了我的问题。你能不能把它贴出来作为答案,这样我就可以把我的问题标记为已解决?谢谢(也谢谢你的博客帖子!)。多对多关系有两种模式。将
对象用于关联表。使用模型,并且具有可以在关联表中存储其他列的优点。您似乎正在使用高级模型,但是如果您使用的是Flask SQLAlchemy,那么您的所有模型都应该继承自
db.Model
,您不应该直接转到SQLAlchemy。我明白了,继承自db.Model就像使用Django的M2M,带有
属性。我确实在使用炼金术。是的,它确实解决了问题,请看此评论创建一个答案,以便我可以将其标记为已解决!