首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >for循环SQLAlchemy (flask)中的更新表

for循环SQLAlchemy (flask)中的更新表
EN

Stack Overflow用户
提问于 2021-03-03 08:52:31
回答 1查看 65关注 0票数 0

我正在尝试执行以下操作:循环遍历dict中的一系列项,并将每个项添加到表的新行中。

由于某些原因,加法只适用于循环的最后一项。下面是我的代码的一部分:

代码语言:javascript
复制
    ######
    # Model of interface_traffic table
    class InterfaceTraffic(UserMixin, db.Model):
        id = db.Column(db.Integer, primary_key=True)
        #
        network_device_id = db.Column(db.Integer, db.ForeignKey('network_device.id'))
        #    
        interface = db.Column(db.String(50), index=True, unique=False)
        traffic_in = db.Column(db.String(10), index=True, unique=False, default=0)
        traffic_out = db.Column(db.String(10), index=True, unique=False, default=0)

        def __repr__(self):
            return '<Interfaces Traffic For NetworkDevice ID: {}>'.format(self.network_device_id) 


    ######
    # Object From Models Tables (interface_traffic table)
    interface_traffic = InterfaceTraffic()
    hostname_for_id = NetworkDevice.query.filter_by(hostname=hostname).first()

    # Dict From Method check_interface_traffic(), provided by host Object Instance of Class NetworkElement
    traffic_on_interfaces = host.check_interface_traffic()

    # Populating Database Params
    for interface, traffic in traffic_on_interfaces.items():
        # interface_traffic.network_device_id is a foreign key
        interface_traffic.network_device_id = hostname_for_id.id
        interface_traffic.interface = interface
        interface_traffic.traffic_in = traffic[0]
        interface_traffic.traffic_out = traffic[1]
        db.session.add(interface_traffic)
        # I tryed with commit in each loop, but has the same behavior
        # db.session.commit()

    # I tryed with flush too, but has the same behavior
    # db.session.flush()
    db.session.commit()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-03 09:16:35

您需要在for循环中创建InterfaceTraffic(),否则它将被覆盖。

代码语言:javascript
复制
for interface, traffic in traffic_on_interfaces.items():
    interface_traffic = InterfaceTraffic() #HERE
    interface_traffic.network_device_id = hostname_for_id.id
    interface_traffic.interface = interface
    interface_traffic.traffic_in = traffic[0]
    interface_traffic.traffic_out = traffic[1]
    db.session.add(interface_traffic)
db.session.commit()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66449209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档