Flask-SQLAlchemy 绑定多个数据库 -> (psycopg2.Operational)

我正在尝试使用 Flask-SQLAlchemy 及其绑定功能创建多个数据库。使用创建单个数据库SQLALCHEMY_DATABASE_URI效果很好。但是,当我添加时,SQLALCHEMY_BINDS它失败并出现以下错误:


File "/usr/local/lib/python3.7/site-packages/psycopg2/__init__.py", line 127, in connect

    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)

sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) FATAL:  database "customer1" does not exist

这是我的config.py文件:


class BaseConfig:

    """Base configuration"""

    SECRET_KEY = 'random_key'

    SQLALCHEMY_TRACK_MODIFICATIONS = False

    TESTING = False


class DevelopmentConfig(BaseConfig):

    """Development configuration"""

    SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL')

    SQLALCHEMY_BINDS = { 

        'customer1': 'postgres://postgres:postgres@auth-db:5432/customer1' 

    }

这是我的init .py文件


db = SQLAlchemy()

migrate = Migrate()


def create_app():


    # instantiate app

    app = Flask(__name__)

    app_settings = os.getenv('APP_SETTINGS')

    app.config.from_object(app_settings) 


    db.init_app(app)

    migrate.init_app(app, db)


    from project.api.auth import auth_blueprint

    app.register_blueprint(auth_blueprint)


    @app.shell_context_processor

    def ctx():

        return { 'app': app, 'db': db }


    return app

我正在通过命令行通过管理.py文件创建数据库:


@cli.command('recreate_db')

def recreate_db():

    db.drop_all()

    db.create_all()

    try:

        db.session.commit()

    except exc.SQLAlchemyError as e:

        logging.info(f'{e}')

我正在创建一个多租户应用程序,并且我尝试创建的模型应该在两个数据库中创建;我的model.py文件是这样的:


class Widgets(db.Model):

    __tablename__ = 'widgets'

    id = db.Column(db.Integer, primary_key=True, autoincrement=True)

    name = db.Column(db.String(100), nullable=False, unique=True)

    create_date = db.Column(db.DateTime, default=datetime.datetime.utcnow)

我到处寻找答案,找到了几个答案,但即使在尝试了所有答案之后,我仍然收到此错误。我错过了什么吗?Flask-migrate 也不起作用,但我怀疑我需要先修复这个错误。任何帮助,将不胜感激。


牧羊人nacy
浏览 86回答 1
1回答

侃侃无极

db.drop_all()并且db.create_all()只删除并创建所有表。(https://docs.sqlalchemy.org/en/13/core/metadata.html#sqlalchemy.schema.MetaData.create_all)如果您想创建数据库(customer1),您应该使用 sqlalchemy-utils。下面的链接是用法。如何使用 SQLAlchemy 创建新数据库?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python