【发布时间】:2021-05-18 07:23:22
【问题描述】:
我有一个熊猫系列并遍历所有项目。每个循环我检查一个条目是否已经存在,如果没有找到条目,则将它们一一添加到 sqlalchemy 会话中。循环完成后,我想检索在提交之前添加到会话中的项目数量。但是,它仅显示 IdentitySet 中的 1 个项目。提交会话时,所有项目都会插入到我的数据库中。
from datetime import datetime
from pandas import Series
from random import randint
from sqlalchemy import create_engine
from sqlalchemy.orm import Session
from .models import Alarm
engine = create_engine(...)
session = Session(engine)
series = Series(data=[randint(1, 10**3) for i in range(0, 12)],
index=[datetime(2020, i, 1) for i in range(1, 13)])
series.count() # Returns 12
for index, value in series.iteritems():
alarm = session.query(Alarm).filter_by(date=index.date()).first() # Returns None
if alarm:
continue
alarm = Alarm(date=index.date(), value=value)
session.add(alarm)
len(session.new) # Returns 1
session.commit() # Inserts 12 entries to database
【问题讨论】:
-
你能添加一个系列的 var 转储吗?
-
添加了一些虚拟数据和导入语句
-
如果您在拨打
len(session.new)后立即print(session.new),您会看到什么? -
我无法重现您的问题。 This code 对我来说很好。
-
是的,你的权利!我再次对其进行了测试,它按预期工作。问题似乎是第一个查询,我将其注释掉,因为我认为这不会是问题......在向会话添加警报并随后在下一个循环中将警报设置为 None 之后似乎是问题。
标签: python session sqlalchemy