如何在SQLite中为数据库迁移获取元数据

我想使用alembic,尤其是它的自动生成功能。 但是,我目前无法在基于SQLite的应用程序上使用Alembic。

这是我初始化应用程序的简化步骤(在test.py中):

from sqlalchemy import MetaData
from sqlalchemy.ext.declarative import declarative_base
from flask import flask
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from flask_sqlalchemy_session import flask_scoped_session

# my existing tables:
from application.usermodel import User
from application.bookmodel import Course,Calendar,TemplateSeason

print('creating metadata obj')
metadata = MetaData()
print('creating Base')
Base = declarative_base(metadata=metadata)
print('creating db')
db = SQLAlchemy()
print('creating app')
app = flask(__name__,instance_relative_config=False)
app.config.from_object('config.Config')
db.app = app
db.init_app(app)

engine = create_engine('sqlite:///new.sqlite3')
session_factory = sessionmaker(bind=engine)
session = flask_scoped_session(session_factory,app)
Base.query = session.query_property()

with app.app_context():
    # Create tables for our models
    db.create_all()
    db.metadata.create_all(bind=engine)
    print(db.metadata)

app.run()

这是上面的示例表定义:

class User(Base):
    __tablename__ = 'user'

    id = Column(Integer,primary_key=True)
    password = Column(String(128),nullable=False)
    last_login = Column(DateTime)
    is_superuser = Column(Boolean,nullable=False)
    username = Column(String(150),nullable=False)

在这里,我认为这是我相关的Alembic设置,以便访问我的表。 (尽管在alembic current命令中,它抱怨找不到test。)

import test
from test import Base
target_metadata = Base.metadata

我认为我的问题是,尽管我尝试绑定到引擎,但数据库元数据仍显示bind=None

另一个问题是,我不确信自己实际上已经为表创建了元数据-即使表已“注册”到Base或有效地单个Metadata对象,我也无法确定-那么它们应该如何使用收集这些信息?

欢迎进行任何澄清,因为来自SQLalchemy和Alembic的文档尚不清楚。

LT198986 回答:如何在SQLite中为数据库迁移获取元数据

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3118262.html

大家都在问