鱼C论坛

 找回密码
 立即注册
查看: 1199|回复: 10

[已解决]flask问题,在list页面如何显示一对多外键的内容

[复制链接]
发表于 2022-1-8 22:02:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

models里边的shift类,这个是一
class Shift(db.Model):
    __tablename__ = 'shift'  # 关系模型中的1
    id = db.Column(db.Integer, primary_key=True, autoincrement=True, nullable=False)
    name = db.Column(db.String(10), nullable=False)
    draw_itp = db.relationship('Draw_itp', backref="shift", lazy="dynamic")

    def __repr__(self):
        return f'<Product_people {self.id} : {self.name}>'

下边是一个记录类,是多
class Draw_itp(db.Model):  # 这里边的班次,机台都是存储上述具体类里的id,需要做外检关联,这个记录是多,上述表是一
    __tablename__ = 'draw_itp'  # 关系模型中的多,记录
    id = db.Column(db.Integer, primary_key=True, autoincrement=True, nullable=False)
    created_at = db.Column(db.DateTime, default=datetime.datetime.now)
    updated_at = db.Column(db.DateTime, default=datetime.datetime.now)
    # shift = db.Column(db.String(10), default='Day')
    shift_id = db.Column(db.Integer, db.ForeignKey('shift.id'))  # ceshi
    # tester = db.Column(db.String(10))
    tester_id = db.Column(db.Integer, db.ForeignKey('test_people.id'))
    # productor = db.Column(db.String(10))
    productor_id = db.Column(db.Integer, db.ForeignKey('product_people.id'))
    # line_name = db.Column(db.String(10))
    line_name_id = db.Column(db.Integer, db.ForeignKey('draw_line.id'))

    wire_dia = db.Column(db.Integer, db.ForeignKey('draw_database.id'))
    wire_dia_t = db.Column(db.Float, default=0.000)
    wire_dia_tt = db.Column(db.String(30))  # tt代表要求值
    f_value = db.Column(db.Float, default=0.000)
    f_value_tt = db.Column(db.String(30))
    EG_gb_tt = db.Column(db.String(30))
    EG_gb = db.Column(db.String(30))
    EG_as_tt = db.Column(db.String(30))
    EG_as = db.Column(db.String(30))
    TS_as_tt = db.Column(db.String(30))
    TS_as = db.Column(db.String(30))
    resistance_tt = db.Column(db.String(30))
    resistance = db.Column(db.String(30))
    appereance = db.Column(db.String(50))
    note = db.Column(db.Text())
    ok_or_not = db.Column(db.Boolean, default=True)



    def __repr__(self):
        return f'<Draw_itp {self.id}  :{self.wire_dia}>'


view里边的如下图

前端是呈现页面


问题:
现在在数据库Draw_itp的记录里记录的是shift的id。
问题是在web上班次这列显示shift类的name字段。


我在view的呈现list的视图函数应该如何写查询呢?
最佳答案
2022-1-9 11:44:04
本帖最后由 阿奇_o 于 2022-1-9 11:47 编辑

你要先想好(设计) 各表都包括些什么(有哪些列),表和表之间通过什么来建立关系(外键) ,
如果你会SQL,这两个应该可以理解,从而有助于你设计出合理可行的"模型"。 不过同时还要看你对各表"业务"的理解。

而用ORM(即flask-sqlalchemy等ORM工具/插件),其实就是对应上面"模型",表 ←→ Python类; 列(字段)←→ 类的属性; 行(记录)←→ 类的实例  

所以关键是:能否设计出合理可行的模型。其次才是代码如何实现,如何查询,如何展示等问题。


2022-01-08_21-56-02.png
2022-01-08_21-55-22.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-1-8 22:05:10 | 显示全部楼层
这个动态数据库关系查询应该如何写呢?困扰好久了,想不明白。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-8 22:24:28 | 显示全部楼层
没用过flask的ORM,用过Django的ORM。我个人更倾向于SQL,毕竟建表建模型是数据库跟在行,它就是专门干这个的。

步骤是:先用SQL建好表关系,然后导入(映射)到Django的Models里。

Flask应该也可以进行类似的操作。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-8 23:23:14 | 显示全部楼层
其实动态查询这里,外键设置有各点开始没有明白。
draw_itp = db.relationship('Draw_itp', backref="shift", lazy="dynamic")
这里边的backref,相当于在Draw_itp类里边加了一个属性时shift,前端遍历的时候直接访问这个属性就能获取repr的返回值
2022-01-08_23-20-48.png
2022-01-08_23-19-50.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-8 23:24:55 | 显示全部楼层
阿奇_o 发表于 2022-1-8 22:24
没用过flask的ORM,用过Django的ORM。我个人更倾向于SQL,毕竟建表建模型是数据库跟在行,它就是专门干这个 ...

感谢回复,不是非it专业,写的项目不大,直接就看的flask,还有很多简单的概念不够理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-9 03:17:29 | 显示全部楼层
本帖最后由 kogawananari 于 2022-1-9 03:23 编辑
阿奇_o 发表于 2022-1-8 22:24
没用过flask的ORM,用过Django的ORM。我个人更倾向于SQL,毕竟建表建模型是数据库跟在行,它就是专门干这个 ...


flask不帶ORM的  只能自己配置第三方ORM  八成它這是用的其他人封裝的低版本的SQLALchemy

orm就是爲了和數據庫解耦不受限于數據庫是mysql還是Oracle
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-9 03:24:29 | 显示全部楼层
本帖最后由 kogawananari 于 2022-1-9 03:25 编辑

建議你直接去讀SQLALchemy的官方文檔 從頭開始看 自己寫一遍 脫離flask單獨去寫 代替sql語句去查詢

實在不行還是學不會就只能寫存儲過程調用了

幸虧你這還是同步的  換成異步SQLALchemy連官方文檔都很含糊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-9 10:52:19 | 显示全部楼层
kogawananari 发表于 2022-1-9 03:24
建議你直接去讀SQLALchemy的官方文檔 從頭開始看 自己寫一遍 脫離flask單獨去寫 代替sql語句去查詢

實在 ...

用的flask-sqlalchemy,flask-wtf
这不是正规军吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-9 11:01:35 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-9 11:44:04 | 显示全部楼层    本楼为最佳答案   
本帖最后由 阿奇_o 于 2022-1-9 11:47 编辑

你要先想好(设计) 各表都包括些什么(有哪些列),表和表之间通过什么来建立关系(外键) ,
如果你会SQL,这两个应该可以理解,从而有助于你设计出合理可行的"模型"。 不过同时还要看你对各表"业务"的理解。

而用ORM(即flask-sqlalchemy等ORM工具/插件),其实就是对应上面"模型",表 ←→ Python类; 列(字段)←→ 类的属性; 行(记录)←→ 类的实例  

所以关键是:能否设计出合理可行的模型。其次才是代码如何实现,如何查询,如何展示等问题。


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-9 12:27:00 | 显示全部楼层
rsj0315 发表于 2022-1-9 10:52
用的flask-sqlalchemy,flask-wtf
这不是正规军吗?

我沒用過flask 應該是是被二次封裝的  你用原版的sqlalchemy寫幾個demo就會了

我學的是fastapi ,用的sqlalchemy是直接用的 沒和框架結合
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 13:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表