我正在尝试执行以下操作:循环遍历dict中的一系列项,并将每个项添加到表的新行中。
由于某些原因,加法只适用于循环的最后一项。下面是我的代码的一部分:
######
# 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()发布于 2021-03-03 09:16:35
您需要在for循环中创建InterfaceTraffic(),否则它将被覆盖。
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()https://stackoverflow.com/questions/66449209
复制相似问题