sql -альхимические проблемы с базой данных sqlite, она не позволяет создавать внешние ключи - PullRequest
0 голосов
/ 22 марта 2020

вот мой код:

class usersTable(db.Model):
    userid = db.Column(db.Integer, primary_key=True)
    fname = db.Column(db.String, nullable=False)
    lname = db.Column(db.String, nullable=False)
    email = db.Column(db.LargeBinary, unique=True, nullable=False)
    username = db.Column(db.LargeBinary, unique=True, nullable=False)
    password = db.Column(db.LargeBinary, nullable=False)
    joined = db.Column(db.Date, nullable=False)
    subuser = db.relationship('subuserTable', backref='userid')

class subuserTable(db.Model):
    userid = db.Column(db.Integer, db.ForeignKey('usersTable.userid'))
    subid = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.LargeBinary, unique=True, nullable=False)
    password = db.Column(db.LargeBinary, nullable=False)
    fname = db.Column(db.String, nullable=False)
    lname = db.Column(db.String, nullable=False)
    admin = db.Column(db.Boolean, default=False)

Проблема в том, что всякий раз, когда я пытаюсь запустить:

db.create_all()

Я сталкиваюсь с этой ошибкой:

sqlalchemy.exc.NoReferencedTableError: Foreign key associated with column 'subuser_table.userid' could not find table 'usersTable' with which to generate a foreign key to target column 'userid'

Я знаю, что есть таблица usersTable, а также есть столбец userid, так почему он доставляет мне столько горя?

1 Ответ

1 голос
/ 22 марта 2020

Измените это:

userid = db.Column(db.Integer, db.ForeignKey('usersTable.userid'))

на

userid = db.Column(db.Integer, db.ForeignKey('users_table.userid'))

С Flask SQLAlchemy документы :

Некоторые детали, которые требуются в SQLAlchemy не является обязательным в Flask -SQLAlchemy. Например, имя таблицы устанавливается автоматически, если оно не переопределено. Он получен из имени класса, преобразованного в строчные буквы, а значение «CamelCase» преобразовано в «camel_case». Чтобы переопределить имя таблицы, установите атрибут класса tablename .

...