我正在为一个网站(带烧瓶)建立一个数据库,其中包含2个表。我已经使用一个表“ Users”进行了第一次迁移,以确保用户授权能够顺利进行。现在,我想集成网站的第二部分,就必须用flask-sqlalchemy设置另一个表。
问题是,每次我尝试运行第二次迁移时(“ flask db migration -m'2nd migration'”->“ flask db upgrade”),我都会收到以下错误消息:
sqlalchemy.exc.InternalError:(pymysql.err.InternalError)(1050,“表'abonnenten'已经存在”))[SQL:'\ n创建表用户(\ n \ tid INTEGER NOT NU LL AUTO_INCREMENT,\ n \ tuser_account VARCHAR(64),\ n \ tPRIMARY KEY(id)\ n)\ n \ n'](此错误的背景位于:http://sqlalche.me/e/2j85)
MySQL数据库在localhost(xampp),MySQL版本5.0(pache / 2.4.39(Win64)OpenSSL / 1.1.1b PHP / 7.3.4,服务器版本:10.1.38-MariaDB)上运行。 该网站是非常基本的,因此没有什么特别的。当前版本更多的是一个空的烧瓶骨架,具有简单的登录/注销/注册功能。
这是我的model.py,其中包含两个用于使用flask sqlalchemy设置数据库表的模型:
from webapp import db, login_manager
from datetime import datetime
from werkzeug.security import generate_password_hash, check_password_hash
from flask_login import UserMixin # is_authenticated is_loggedin usw...
@login_manager.user_loader # if user is authenticated, then....
def load_user(user_id):
return Users.query.get(user_id)
class Users(db.Model, UserMixin):
__tablename__ = 'Users'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), unique=True, index=True)
password_hash = db.Column(db.String(500))
def __init__(self, username, password):
self.username = username
self.password_hash = generate_password_hash(password)
def check_password(self, password):
return check_password_hash(self.password_hash, password)
def __repr__(self):
return f"Username: {self.username}"
class Abonnenten(db.Model):
__tablename__ = 'Abonnenten'
id = db.Column(db.Integer, primary_key=True)
user_account = db.Column(db.String(64), unique=True, index=True)
def __init__(self, target_account):
self.target_account = target_account
def __repr__(self):
return f"Abonnent: {self.target_account}"
在我的原子控制台中,我运行命令 flask db migration -m'一些迁移消息'-> flask db升级
输入“ flask db upgrade”后,我收到上述错误消息,并且没有表将被写入数据库。
由于我遵循了教程,所以预期的行为将是可以进行迁移,而无论某些表是否已经存在。我的理解是,sqlalchemy知道该表已经存在,只是忽略了已经存在的表的代码并仍然运行迁移。
也许有人有主意。预先谢谢你们!