向SQLITE添加列时出错

时间:2015-08-23 05:12:59

标签: python sqlite flask flask-sqlalchemy

我正在使用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到它;它抛出以下错误:

  

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

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

4 个答案:

答案 0 :(得分:0)

db migrate之后

运行python manage.py db upgrade

答案 1 :(得分:0)

错误消息是&#34;表格角色已经存在&#34;。因此,您需要首先删除数据库并尝试再次运行python manage.py db upgrade。

答案 2 :(得分:0)

您必须通过运行mysqli_*;

创建数据库

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

  1. 删除数据库文件(.sqlite);
  2. 删除迁移文件夹;
  3. 运行db.create_all()以创建新的迁移;
  4. 运行... db init... db migrate;
  5. ... db upgrade和init迁移之间可能会有一些重复的操作。所以只需手动跳过创建表。

答案 3 :(得分:0)

运行以下三个命令:

flask db stamp head
flask db migrate
flask db upgrade