我的 models.py 文件中有以下代码行:
referalls = db.table('referrals',
db.Column('referrer', db.String(64), db.ForeignKey('User.email')),
db.Column('referral', db.String(64), db.ForeignKey('User.email'))
)
这是为我试图实施的推荐系统创建一个多对多关系表。
但是,当我运行 migrate / upgrade 命令时,Alembic不会创建表。
我正在遵循官方的Flask-SQLAlchemy教程:http://flask-sqlalchemy.pocoo.org/2.1/models/
为了清楚起见,这里是用户类:
class User(UserMixin, db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(64), unique=True, index=True)
username = db.Column(db.String(64), unique=True, index=True)
role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
password_hash = db.Column(db.String(128))
confirmed = db.Column(db.Boolean, default=False)
name = db.Column(db.String(64))
location = db.Column(db.String(64))
about_me = db.Column(db.Text())
member_since = db.Column(db.DateTime(), default=datetime.utcnow)
last_seen = db.Column(db.DateTime(), default=datetime.utcnow)
...
我相信我的问题可能是以下一行(摘自Flask-SQLAlchemy官方文档):
tags = db.relationship('Tag', secondary=tags,
backref=db.backref('pages', lazy='dynamic'))
我试过了:
referalls = db.relationship('User', secondary=referalls,
backref=db.backref('users', lazy='dynamic'))
但同样的事情:Alembic没有确定推荐表。
非常感谢您对此的任何意见。
答案 0 :(得分:1)
我有同样的问题并通过使用继承db.Model的类而不是按照烧瓶教程建议的方式声明表来解决。当我将所有内容定义为一个类时,它才起作用。 可能是alembic的一个问题。
尝试:
class Referalls(db.Model):
__tablename__ = 'referalls'
referrer = db.Column(db.String(64), db.ForeignKey('User.email'))
referral = db.Column(db.String(64), db.ForeignKey('User.email'))