Код: Выделить всё
# config.py
class BaseConfig:
app_dir_name = os.path.dirname(__file__)
main_db_path = os.path.join(app_dir_name, 'main.db')
to_do_db_path = os.path.join(app_dir_name, 'to_do.db')
appmeta_db_path = os.path.join(app_dir_name, 'appmeta.db')
SQLALCHEMY_DATABASE_URI = f'sqlite:///{main_db_path}'
SQLALCHEMY_BINDS = {
'to_do_base': f'sqlite:///{to_do_db_path}',
'app_session_meta': f'sqlite:///{appmeta_db_path}'
}
Код: Выделить всё
# __init.py__
from .config import BaseConfig
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from flask_cors import CORS
from app.socketio_instance import socketio
db = SQLAlchemy()
migrate = Migrate()
def create_app(config_type='work'):
app = Flask(__name__)
socketio.init_app(app)
if config_type == 'test':
CORS(app, resources={r"/*": {"origins": "*"}})
app.config.from_object(TestingConfig)
TestingConfig.init_app(app)
print('test')
else:
raise ValueError("Invalid configuration type")
db.init_app(app)
with app.app_context():
from .main import main as main_blueprint
app.register_blueprint(main_blueprint)
from .tasks import to_do_app as tasks_blueprint
app.register_blueprint(tasks_blueprint, url_prefix='/tasks')
from .dashboard import dashboard as dashboard_blueprint
app.register_blueprint(dashboard_blueprint)
db.create_all()
migrate.init_app(app, db)
return app
Код: Выделить всё
from app import db
db.metadata.schema = 'to_do_base'
# ToDoBase
# it's work
class Task(db.Model):
__tablename__ = 'tasks'
id = db.Column('TaskID', db.Integer, primary_key=True)
title = db.Column('Title', db.String(255))
description = db.Column('Description', db.Text)
class List(db.Model):
__tablename__ = 'lists'
__bind_key__ = 'to_do_base'
id = db.Column('ListID', db.Integer, primary_key=True)
name = db.Column('ListName', db.String(255))
# don't work:
task_list_relations = db.Table('task_list_relations', db.metadata, db.Column('TaskID', db.Integer, db.ForeignKey('tasks.TaskID'), primary_key=True), db.Column('ListID', db.Integer, db.ForeignKey('lists.ListID'), primary_key=True))
# Task.lists = db.relationship('List', secondary='task_list_relations', back_populates='tasks')
1.
Код: Выделить всё
db.metadata.schema = 'to_do_base'
task_list_relations = db.Table('task_list_relations', db.metadata, ...)
Код: Выделить всё
list_group_relations = db.Table('list_group_relations', ... , bind_key='to_do_base')
Код: Выделить всё
metadata = MetaData(schema='to_do_base')
list_group_relations = db.Table('list_group_relations', metadata, bind_key='to_do_base')
Код: Выделить всё
metadata = MetaData(schema='to_do_base')
list_group_relations = db.Table('list_group_relations', metadata, info={'bind_key': 'to_do_base'})
Подробнее здесь: https://stackoverflow.com/questions/785 ... econd-base