Flask-SQLAlchemy 绑定多个数据库 -> (psycopg2.OperationalError) FATAL: database "customer1" does not exist
Flask-SQLAlchemy binding multiple database -> (psycopg2.OperationalError) FATAL: database "customer1" does not exist
我正在尝试使用 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
我正在通过我的 manage.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 也不起作用,但我怀疑我需要先修复此错误。任何帮助将不胜感激。
db.drop_all()
和 db.create_all()
仅删除并创建所有 table.(https://docs.sqlalchemy.org/en/13/core/metadata.html#sqlalchemy.schema.MetaData.create_all)
如果你想创建数据库(customer1),你应该使用sqlalchemy-utils。 link 下面是用法。
How to create a new database using SQLAlchemy?
我正在尝试使用 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
我正在通过我的 manage.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 也不起作用,但我怀疑我需要先修复此错误。任何帮助将不胜感激。
db.drop_all()
和 db.create_all()
仅删除并创建所有 table.(https://docs.sqlalchemy.org/en/13/core/metadata.html#sqlalchemy.schema.MetaData.create_all)
如果你想创建数据库(customer1),你应该使用sqlalchemy-utils。 link 下面是用法。
How to create a new database using SQLAlchemy?