Как создать Flask -Миграция отношений в многобайтовой Flas-SQLAlchemy - PullRequest
0 голосов
/ 29 марта 2020

У меня есть база данных связывания в SQL -Alchemi, и я бы создал связь между двумя таблицами (пользовательская таблица, административная таблица). Таблицы находятся в двух отдельных файлах (users.db, admins.db). Когда я создаю базу данных, использую db.create_all() в init .py, тогда все работает. Проблема показа, когда я создаю базу данных, использую Flask -Миграция, затем, когда пользовательская таблица создана, я получил ошибку не найдена административная таблица и не создает отношения.

Я не знаю, возможно ли создать связь в двух отдельный файл в базе данных bind SQL -Alchemy от FLask -Migrate. Я думаю, что это возможно, если в базе данных bind SQL -Алхимия без вас Flask -Mirate все работает. Я буду благодарен за ответ.

Я создаю миграцию б * python manage.py db init --multidb.

Сообщение об ошибке: sqlalchemy.ex c .NoReferencedTableError: Внешний ключ, связанный со столбцом 'user.id_admin_account 'не удалось найти таблицу' admin ', с помощью которой можно сгенерировать внешний ключ для целевого столбца' id '

config.py

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import create_engine
from app import app
import os

class Config(object):
    file_path_Main = os.path.abspath(os.getcwd())+"/database/main.db?charset=utf8"
    file_path_Users = os.path.abspath(os.getcwd())+"/database/users.db?charset=utf8"
    file_path_Admin = os.path.abspath(os.getcwd())+"/database/admin.db?charset=utf8"

    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///'+file_path_Main
    app.config['SQLALCHEMY_BINDS'] = {
        'users':'sqlite:///'+ file_path_Users,
        'admins':'sqlite:///'+ file_path_Admin,
    }

manage.py

from flask import Flask
from app import app, db
from flask_sqlalchemy import SQLAlchemy
from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand
from sqlalchemy.orm import relationship
from sqlalchemy import Table, Column, Integer, ForeignKey, Boolean, String
from flask_login import UserMixin



app.config.from_object('config')
db = SQLAlchemy(app)
migrate = Migrate(app, db)
manager = Manager(app)

manager.add_command('db', MigrateCommand)

class Admin (UserMixin, db.Model):
    __bind_key__ = 'admins'
    __tablename__ = 'admin'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(40))
    surname = db.Column(db.String(40))
    permissionsLevel = db.Column(db.Integer)
    user_owner = relationship('User', backref='admin')

class User (UserMixin, db.Model):
    __bind_key__ = 'users'
    __tablename__ = 'user'
    id = db.Column(db.Integer, primary_key=True)
    id_admin_account = db.Column(Integer, ForeignKey('admin.id'))
    username = db.Column(db.String(128), unique=True)
    password = db.Column(db.String(255))
    email = db.Column(db.String(255), unique=True)


if __name__ == '__main__':
    manager.run()

1 Ответ

0 голосов
/ 13 апреля 2020

Не думаю, что вы можете определить внешний ключ в двух разных базах данных. Я не уверен, зачем его создавать с помощью db.create_all (). С другой стороны, вам действительно нужен внешний ключ в этом случае. Я мог бы управлять отношениями из самого приложения.

...