rsj0315 发表于 2022-1-8 22:02:47

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


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的视图函数应该如何写查询呢?

rsj0315 发表于 2022-1-8 22:05:10

这个动态数据库关系查询应该如何写呢?困扰好久了,想不明白。。。

阿奇_o 发表于 2022-1-8 22:24:28

没用过flask的ORM,用过Django的ORM。我个人更倾向于SQL,毕竟建表建模型是数据库跟在行,它就是专门干这个的。

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

Flask应该也可以进行类似的操作。

rsj0315 发表于 2022-1-8 23:23:14

其实动态查询这里,外键设置有各点开始没有明白。
draw_itp = db.relationship('Draw_itp', backref="shift", lazy="dynamic")
这里边的backref,相当于在Draw_itp类里边加了一个属性时shift,前端遍历的时候直接访问这个属性就能获取repr的返回值

rsj0315 发表于 2022-1-8 23:24:55

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

感谢回复,不是非it专业,写的项目不大,直接就看的flask,还有很多简单的概念不够理解

kogawananari 发表于 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{:10_292:}

orm就是爲了和數據庫解耦不受限于數據庫是mysql還是Oracle

kogawananari 发表于 2022-1-9 03:24:29

本帖最后由 kogawananari 于 2022-1-9 03:25 编辑

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

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

幸虧你這還是同步的換成異步SQLALchemy連官方文檔都很含糊

rsj0315 发表于 2022-1-9 10:52:19

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

實在 ...

用的flask-sqlalchemy,flask-wtf
这不是正规军吗?

小程奋发图强 发表于 2022-1-9 11:01:35

{:9_241:}

阿奇_o 发表于 2022-1-9 11:44:04

本帖最后由 阿奇_o 于 2022-1-9 11:47 编辑

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

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

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


kogawananari 发表于 2022-1-9 12:27:00

rsj0315 发表于 2022-1-9 10:52
用的flask-sqlalchemy,flask-wtf
这不是正规军吗?

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

我學的是fastapi ,用的sqlalchemy是直接用的 沒和框架結合
页: [1]
查看完整版本: flask问题,在list页面如何显示一对多外键的内容