创建数据表时,外键无法发现主键id,创建失败

来源:5-1 首页问题列表开发

科伟

2022-02-08 20:11:52

问题描述:

根据教程创建好ORM模型,并按照蓝图划分好模块后,在PythonConsole中运行创建表代码时,报错

相关截图:

https://img.mukewang.com/climg/62025daa092658d711060294.jpg

https://img.mukewang.com/climg/62025d88097b4a1d11090358.jpg

https://img.mukewang.com/climg/62025dc609c46bd116040154.jpg

相关代码:

class User(db.Model):
    """ 用户账户模型 """
    __tabelname__ = 'accounts_user'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True, comment='用户ID')
    username = db.Column(db.String(64), unique=True, nullable=False, comment='用户名')
    nickname = db.Column(db.String(64), comment='用户昵称')
    password = db.Column(db.String(256), nullable=False, comment='密码')
    avatar = db.Column(db.String(256), comment='用户头像')
    status = db.Column(db.SmallInteger, default=constants.UserStatus.USER_ACTIVE.value, comment='用户状态')
    is_super = db.Column(db.SmallInteger, default=constants.UserRole.COMMON.value, comment='是否为超级用户')
    created_at = db.Column(db.DateTime, default=datetime.now, comment='注册时间')
    updated_at = db.Column(db.DateTime, default=datetime.now, onupdate=datetime.now, comment='更新时间')


class UserProfile(db.Model):
    """ 用户详细信息模型 """
    __tablename__ = 'accounts_user_profile'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True, comment='id')
    user_id = db.Column(db.Integer, db.ForeignKey('accounts_user.id'), nullable=False, comment='用户ID')
    username = db.Column(db.String(64), nullable=False, comment='用户名 冗余字段')
    real_name = db.Column(db.String(64), comment='真实姓名')
    sex = db.Column(db.String(32), comment='用户性别')
    maxim = db.Column(db.String(256), comment='用户格言')
    address = db.Column(db.String(256), comment='用户地址')
    created_at = db.Column(db.DateTime, default=datetime.now(), comment='新增时间')
    updated_at = db.Column(db.DateTime, default=datetime.now(), onupdate=datetime.now(), comment='修改时间')

    # 建立用户一对一关系属性,user.profile
    user = db.relationship('User', backref=db.backref('profile', uselist=False))

错误提示

相关代码:

Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "C:\Users\Administrator\Desktop\qa_flask\venv\lib\site-packages\flask_sqlalchemy\__init__.py", line 1094, in create_all
    self._execute_for_all_tables(app, bind, 'create_all')
  File "C:\Users\Administrator\Desktop\qa_flask\venv\lib\site-packages\flask_sqlalchemy\__init__.py", line 1086, in _execute_for_all_tables
    op(bind=self.get_engine(app, bind), **extra)
  File "C:\Users\Administrator\Desktop\qa_flask\venv\lib\site-packages\sqlalchemy\sql\schema.py", line 4785, in create_all
    bind._run_ddl_visitor(
  File "C:\Users\Administrator\Desktop\qa_flask\venv\lib\site-packages\sqlalchemy\engine\base.py", line 3117, in _run_ddl_visitor
    conn._run_ddl_visitor(visitorcallable, element, **kwargs)
  File "C:\Users\Administrator\Desktop\qa_flask\venv\lib\site-packages\sqlalchemy\engine\base.py", line 2113, in _run_ddl_visitor
    visitorcallable(self.dialect, self, **kwargs).traverse_single(element)
  File "C:\Users\Administrator\Desktop\qa_flask\venv\lib\site-packages\sqlalchemy\sql\visitors.py", line 524, in traverse_single
    return meth(obj, **kw)
  File "C:\Users\Administrator\Desktop\qa_flask\venv\lib\site-packages\sqlalchemy\sql\ddl.py", line 825, in visit_metadata
    collection = sort_tables_and_constraints(
  File "C:\Users\Administrator\Desktop\qa_flask\venv\lib\site-packages\sqlalchemy\sql\ddl.py", line 1289, in sort_tables_and_constraints
    dependent_on = fkc.referred_table
  File "C:\Users\Administrator\Desktop\qa_flask\venv\lib\site-packages\sqlalchemy\sql\schema.py", line 3705, in referred_table
    return self.elements[0].column.table
  File "C:\Users\Administrator\Desktop\qa_flask\venv\lib\site-packages\sqlalchemy\util\langhelpers.py", line 1113, in __get__
    obj.__dict__[self.__name__] = result = self.fget(obj)
  File "C:\Users\Administrator\Desktop\qa_flask\venv\lib\site-packages\sqlalchemy\sql\schema.py", line 2410, in column
    raise exc.NoReferencedTableError(
sqlalchemy.exc.NoReferencedTableError: Foreign key associated with column 'accounts_user_profile.user_id' could not find table 'accounts_user' with which to generate a foreign key to target column 'id'

不知道是哪里出了问题,请老师解答,谢谢。

写回答

1回答

时间,

2022-02-09

同学,你好!__tablename__写错了,修改一下即可

https://img.mukewang.com/climg/62031bce096ae49b05730170.jpg

祝学习愉快!

0

0 学习 · 2433 问题

查看课程