栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

SqlAlchemy-如何使用模型类而不是物理表名称定义外键列

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SqlAlchemy-如何使用模型类而不是物理表名称定义外键列

简单来说

  • 来自作者以外的模型

    author_id = db.Column(db.Integer, db.ForeignKey(Author.__table__.c.id))

  • 从Author模型本身,即自我参考-仅列出列名称

    author_id = db.Column(db.Integer, db.ForeignKey(id))

  • 不能使用字符串值

    author_id = db.Column(db.Integer, db.ForeignKey('Author.id'))

详细资料

ForeignKey接受column作为第一个参数,该参数可以是类型

Column
或字符串,格式为
schema_name.table_name.column_name
table_name.column_name
。您在声明性模型中定义的列将转换为
InstumentedAttribute
对象。这就是
db.ForeignKey(Author.id)
导致错误的原因。您可以通过
__table__
模型的属性访问实际列:

author_id = db.Column(db.Integer, db.ForeignKey(Author.__table__.c['id']))

要么

author_id = db.Column(db.Integer, db.ForeignKey(Author.__table__.c.id))

如果您需要定义自引用外键,则只需传递列名即可。虽然模型的声明尚未完成,但它仍然具有

Column
类型:

id = db.Column(db.Integer, primary_key=True)parent_id = db.Column(db.Integer, db.ForeignKey(id))

请注意,您不能以这种方式定义外键:

author_id = db.Column(db.Integer, db.ForeignKey('Author.id'))

您需要指定 物理表 名称, 映射类 名称对此无效。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/647314.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号