Flask-SQLAlchemy. Как создавать таблицы во второй базеPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Flask-SQLAlchemy. Как создавать таблицы во второй базе

Сообщение Anonymous »

Я пытаюсь создать таблицы во второй базе данных. Я пробовал много вариантов, но таблицы просто не создаются. Если я использую основную базу данных (без указания привязок), то все создается и работает нормально, но во второй базе данных, используя db.Table, таблицы не создаются (таблицы, созданные через классы, работают без проблем)

Код: Выделить всё

# 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')
3.

Код: Выделить всё

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'})
Основная проблема в том, что таблицы, созданные с помощью db.Table, не создаются в нужной базе данных. Если все создано в основной базе данных, это работает, но когда я пытаюсь создать это в базе данных с помощьюbind_key, ничего не создается.

Подробнее здесь: https://stackoverflow.com/questions/785 ... econd-base
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»