python - 尝试迁移数据库时出错(slalchemy、slqite3)

标签 python sqlite flask sqlalchemy alembic

我有下一个 models.py 文件:

from app import db, bcrypt
from sqlalchemy import ForeignKey
from sqlalchemy.orm import relationship


class BlogPost(db.Model):

    __tablename__ = "posts"

    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String, nullable=False)
    desc = db.Column(db.String, nullable=False)
    author_id = db.Column(db.Integer, ForeignKey('users.id'))

    def __init__(self, title, desc):
        self.title = title
        self.desc = desc

    def __repr__(self):
        return "Titulo >> " + self.title

class User(db.Model):

    __tablename__ = 'users'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String, nullable=False)
    email = db.Column(db.String, nullable=False)
    password = db.Column(db.String, nullable=False)
    posts = relationship("BlogPost", backref="author")

    def __init__(self, name, email, password):
        self.name = name
        self.email = email
        self.password = password

    def __repr__(self):
        return "Usuario >> ", self.name

然后我跑了:

python manage.py db init

一切都很好,问题是当我尝试修改我的模型文件以进行迁移时..我只需更改行:

self.password = password

至:

self.password = bcrypt.generate_password_hash(password)

当我运行时:

python manage.py db migrate

它可以工作,但是当我尝试升级时:

python manage.py db upgrade

我收到下一个错误:

"No support for ALTER of constraints in SQLite dialect")
NotImplementedError: No support for ALTER of constraints in SQLite dialect

注意:数据库只有几条记录用于测试..谢谢!

最佳答案

自大多数 Alembic 教程编写以来,Alembic 已经改变了 SQLite 迁移的完成方式。 ALTER 命令现在需要使用 batch mode 。如果您稍后决定从 SQLite 切换,此模式仍然与其他数据库兼容。

对于每个要更改的表,将所有操作放入 with op.batch_alter_table('table_name'): block 中。

def upgrade():
    with op.batch_alter_table('table_name'):
        op.alter_column(...)

关于python - 尝试迁移数据库时出错(slalchemy、slqite3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31600468/

相关文章:

python - 无法删除一对多关系中的父记录 - Flask-SqlAlchemy

sql - 在sqlite中返回已删除的行

python - 将三个 URL 路由到单个端点?使用 Flask 和 Jinja2

python - 我可以让 CherryPy 找到它自己的可用端口吗?

python - pylibmc : undefined symbol: memcached_server_list

sqlite - 如何重置我的SQLite密码?

javascript - Nodejs Sequelize 的 FindOne() 模型包含四舍五入或 chop 的值

python - 使用 Flask 从 HTML 表中删除单个 SQLAlchemy 行

python - 如何从另一个函数中拦截一个函数中的变量

python - 获取 SQLAlchemy 中已创建记录的 ID