flask_sqlalchemy 命名遇到的一个小坑

大概用了三个小时的时间.

models.py

class DriveRecord(db.Model):
    """drive record model"""
    id = db.Column(db.Integer(), primary_key=True)
    piolt_id = db.Column(db.Integer(), db.ForeignKey("piolt.id"))
    request = db.Column(db.Text())
    response = db.Column(db.Text())
    logs = db.relationship(
        "Log",
        backref="driverecord",
        lazy="dynamic"
    )


class Log(db.Model):
    """log"""
    id = db.Column(db.Integer(), primary_key=True)
    driverecord_id = db.Column(db.Integer(), db.ForeignKey("driverecord.id"))
    command = db.Column(db.String(50))
    sn = db.Column(db.String(50))
    hostname = db.Column(db.String(100))
    idc = db.Column(db.String(50))
    ip = db.Column(db.String(50))
    iloip = db.Column(db.String(50))
    result = db.Column(db.Text())
    req_time = db.Column(db.DateTime())
    resp_time = db.Column(db.DateTime())

执行 db.create_all(), 报错: NoReferencedTableError: Foreign key associated with column 'log.driverecord_id' could not find table 'driverecord' with which to generate a foreign key to target column 'id'

找不到 driverecord, 然鹅, 检测了拼写之后, 确认没有问题.

直到一位老司机想起一个细节, DriveRecord 类, 创建的 table 名应该是 drive_record!

改成 db.ForeignKey("drive_record.id") 之后, 顺利创建.

posted @ 2016-12-14 18:39  Herbert_Kwok  阅读(572)  评论(0编辑  收藏  举报