首页 文章

向SQLITE添加列时出错

提问于
浏览
0

我正在使用Flask和sqlite作为数据库 . 项目的要求不断增加,所以我必须添加列,但我无法做到 . 我在谷歌搜索但没有找到答案 . 来自model.py的代码部分

class Role(db.Model):
    __tablename__ = 'roles'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), unique=True)
    default = db.Column(db.Boolean, default=False, index=True)
    permissions = db.Column(db.Integer)
    users = db.relationship('User', backref='role', lazy='dynamic')

    @staticmethod
    def insert_roles():
        roles = {
            'User': (Permission.FOLLOW |
                     Permission.COMMENT |
                     Permission.WRITE_ARTICLES, True),
            'Moderator': (Permission.FOLLOW |
                          Permission.COMMENT |
                          Permission.WRITE_ARTICLES |
                          Permission.MODERATE_COMMENTS, False),
            'Administrator': (0xff, False)
        }
        for r in roles:
            role = Role.query.filter_by(name=r).first()
            if role is None:
                role = Role(name=r)
            role.permissions = roles[r][0]
            role.default = roles[r][1]
            db.session.add(role)
        db.session.commit()

    def __repr__(self):
        return '<Role %r>' % self.name




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))
    age = db.Column(db.Integer)
    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)
    avatar_hash = db.Column(db.String(32))
    posts = db.relationship('Post', backref='author', lazy='dynamic')

每当我尝试通过运行命令 python manage.py db upgrade 来添加一个列;它抛出以下 error:

sqlalchemy.exc.OperationalError:(sqlite3.OperationalError)表角色已存在[SQL:u'\ nCREATE TABLE角色(\ n \ tid INTEGER NOT NULL,\ n \ tname VARCHAR(64),\ n \ tPRIMARY KEY(id) ),\ n \ tUNIQUE(名称)\ n)\ n \ n']

如何将列添加到我的数据库?

3 回答

  • 0

    db migrate 之后

    python manage.py db upgrade .

  • 0

    错误消息是“表角色已存在” . 因此,您需要首先删除db并尝试再次运行python manage.py db upgrade .

  • 0

    您必须通过运行 db.create_all() 创建数据库;

    我遇到了同样的问题,您可以尝试我的解决方案如下:

    • 删除数据库文件(.sqlite);

    • 删除迁移文件夹;

    • 运行 ... db init 以创建新的迁移;

    • 运行 ... db migrate... db upgrade ;

    db.create_all() 与init迁移之间可能存在一些重复操作 . 所以只需手动跳过创建表 .

相关问题