Неправильная деформация внешнего ключа SQLAlchemy в колбе - PullRequest
1 голос
/ 13 мая 2019

Я написал следующий код:

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    first_name = db.Column(db.String(255), nullable=True)
    last_name = db.Column(db.String(255), nullable=True)
    email = db.Column(db.String(255), unique=True, nullable=False)

    password_expires_at = db.Column(db.DateTime, nullable=False)
    active = db.Column(db.Boolean, nullable=False)

    created_at = db.Column(db.DateTime, nullable=False,
        default=datetime.utcnow)
    updated_at = db.Column(db.DateTime, nullable=False,
        default=datetime.utcnow)

    session_id = db.Column(db.Integer, db.ForeignKey('session.id'),
        nullable=False)

class Session(db.Model):
    id = db.Column(db.String(255), primary_key=True)
    ip = db.Column(db.String(255), unique=True, nullable=False)
    user = db.relationship('User', backref='session')

db.create_all()

При запуске Flask я получаю следующую ошибку:

sqlalchemy.exc.OperationalError: (MySQLdb._exceptions.OperationalError) (1005, 'Can\'t create table `bugbot`.`user` (errno: 150 "Foreign key constraint is incorrectly formed")')
[SQL: 
CREATE TABLE user (
        id INTEGER NOT NULL AUTO_INCREMENT, 
        first_name VARCHAR(255), 
        last_name VARCHAR(255), 
        email VARCHAR(255) NOT NULL, 
        password_expires_at DATETIME NOT NULL, 
        active BOOL NOT NULL, 
        created_at DATETIME NOT NULL, 
        updated_at DATETIME NOT NULL, 
        session_id INTEGER NOT NULL, 
        PRIMARY KEY (id), 
        UNIQUE (email), 
        CHECK (active IN (0, 1)), 
        FOREIGN KEY(session_id) REFERENCES session (id)
)

]

Я следовал учебному пособию, чтобы получить этот код, поэтому я незнаю, что я делаю не такКто-нибудь может мне помочь?

1 Ответ

3 голосов
/ 13 мая 2019

Столбец, на который вы пытаетесь наложить ограничение (User.session_id), имеет тип Integer, тогда как столбец, на который он ссылается (Session.id), имеет тип String!Вот почему он не работает, сделайте оба типа совместимыми и запустите его снова, он должен работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...