Flask-SQLAlchemy Alembic迁移

如何解决Flask-SQLAlchemy Alembic迁移

我正在尝试使用Flask-SQLAlchemy和alembic在postgresDB上进行数据库迁移。

models.py

import datetime

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()


class TestOne(db.Model):
    __tablename__ = 'test_one'
    __bind_key__ = 'tester'
    __table_args__ = {"schema": "schema1"}

    id = db.Column(db.Integer,primary_key=True)
    column1 = db.Column(db.String(50),unique=True,nullable=False)
    timestamp = db.Column(db.DateTime,default=datetime.datetime.utcnow)

    def __str__(self):
        return f"<TestOne {self.column1}>"


class TestTwo(db.Model):
    __tablename__ = 'test_two'
    __bind_key__ = 'tester'

    id = db.Column(db.Integer,primary_key=True)
    code = db.Column("code",db.String(50),index=True,nullable=False)
    f_date = db.Column(db.DateTime,nullable=False)
    t_date = db.Column(db.Date,nullable=False)
    modified = db.Column("modified",db.Boolean,nullable=False)

    __table_args__ = (
        db.Index(
            "ix_test_two_code_modified",code,modified,postgresql_where=(modified.is_(True))
        ),{"schema": "public"},)

    def __str__(self):
        return f"<TestTwo {self.code}>"

数据库设置

def setup_database(app):
    from .models import db

    db.init_app(app)
    migrate.init_app(app,db,include_schema=True)
    manager = Manager(app)
    manager.add_command('db',MigrateCommand)

    with app.app_context():
        db.create_all(app=app,bind='tester')
        return app

并按照文档中指定的步骤进行操作

flask db init
flask db migrate -m "initial"
flask db upgrade

烧瓶db migration -m“初始迁移” 在migrartion> versions目录中创建initial.py文件,并在postgresDB中创建表

initial.py

"""initial

Revision ID: 65bc44e61e98
Revises: 
Create Date: 2020-08-11 23:17:08.664515

"""
from alembic import op
import sqlalchemy as sa


# revision identifiers,used by Alembic.
revision = '65bc44e61e98'
down_revision = None
branch_labels = None
depends_on = None


def upgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    op.create_table('test_two',sa.Column('id',sa.Integer(),nullable=False),sa.Column('code',sa.String(length=50),sa.Column('f_date',sa.DateTime(),sa.Column('t_date',sa.Date(),sa.Column('modified',sa.Boolean(),sa.PrimaryKeyConstraint('id'),schema='public'
    )
    op.create_index(op.f('ix_public_test_two_code'),'test_two',['code'],unique=False,schema='public')
    op.create_index(op.f('ix_public_test_two_modified'),['modified'],schema='public')
    op.create_index('ix_test_two_code_modified',['code','modified'],schema='public',postgresql_where=sa.text('modified IS 1'))
    op.create_table('test_one',sa.Column('column1',sa.Column('timestamp',nullable=True),sa.UniqueConstraint('column1'),schema='schema1'
    )
    # ### end Alembic commands ###


def downgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    op.drop_table('test_one',schema='schema1')
    op.drop_index('ix_test_two_code_modified',table_name='test_two',schema='public')
    op.drop_index(op.f('ix_public_test_two_modified'),schema='public')
    op.drop_index(op.f('ix_public_test_two_code'),schema='public')
    op.drop_table('test_two',schema='public')
    # ### end Alembic commands ###

但是烧瓶数据库升级失败并显示错误

    cursor.execute(statement,parameters)
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) unknown database public
[SQL:
CREATE TABLE public.test_two (
        id INTEGER NOT NULL,code VARCHAR(50) NOT NULL,f_date DATETIME NOT NULL,t_date DATE NOT NULL,modified BOOLEAN NOT NULL,PRIMARY KEY (id),CHECK (modified IN (0,1))
)

]
(Background on this error at: http://sqlalche.me/e/13/e3q8)

不确定为什么要考虑将架构公开为“数据库”,或者甚至将include_schema参数添加到True以使用多个架构,也不确定是什么问题?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-