如何解决:“ sqlalchemy.exc.InternalError:(pymysql.err.InternalError)(1050,“表”已存在”))

时间:2019-05-22 11:33:36

标签: python sqlalchemy alembic

我正在为一个网站(带烧瓶)建立一个数据库,其中包含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知道该表已经存在,只是忽略了已经存在的表的代码并仍然运行迁移。

也许有人有主意。预先谢谢你们!

0 个答案:

没有答案