У меня есть база данных связывания в 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()