Python 烧瓶:更新的行数

Python 烧瓶:更新的行数,python,sqlalchemy,Python,Sqlalchemy,如何从Flask中的db.session.commit()获取更新/添加的行数 如果我尝试: for row in csv_data: ticket_num = row[0] # Generate random UUID token string token = uuid.uuid4() ticket = Ticket(token, ticket_num, None, None, batch_num) d

如何从Flask中的
db.session.commit()
获取更新/添加的行数

如果我尝试:

    for row in csv_data:
        ticket_num = row[0]

        # Generate random UUID token string
        token = uuid.uuid4()

        ticket = Ticket(token, ticket_num, None, None, batch_num)
        db.session.add(ticket)

    num = db.session.commit()
    if num:
        flash(str(num) + ' tickets were uploaded/updated.')
我没有得到任何反馈

db.session.commit()
不会返回任何内容,因此您可能希望尝试跟踪要添加到db中的内容的数量,例如:

flash(str(len(csv_data)) + ' tickets were uploaded/updated.')

有会话的属性,您可以检查数据库中将要发生的事情。会话有
new
:对于将被添加到数据库的对象和
dirty
:对于将被更新的对象:

t1 = Ticket(token, ticket_num, None, None, batch_num)
t2 = Ticket(token, ticket_num, None, None, batch_num)
t3 = Ticket.query.filter_by(token='Something to match').first()
t3.token = 'Something new'
db.session.add_all([t1, t2, t3])

# check for new
>>> db.session.new
IdentitySet([<Ticket (transient 140452313747240)>, <Ticket (transient 140452278620112)>])
# check updates
>>> db.session.dirty
>>>db.session.dirty
IdentitySet([<Ticket 2>])  # 2 is ticket id for me
t1=票据(令牌、票据编号、无、无、批次编号)
t2=票据(令牌、票据编号、无、无、批次编号)
t3=Ticket.query.filter_by(token='Something to match')。first()
t3.token='新事物'
db.session.add_all([t1,t2,t3])
#检查是否有新的
>>>db.session.new
IdentitySet([,])
#检查更新
>>>db.session.dirty
>>>db.session.dirty
IdentitySet([])#2是我的票证id
您可以检查课程长度:
len(db.session.new)


请注意,这在提交之前可用,但您将知道添加和更新了多少项。

@PRMoureu I在示例中添加了一些详细信息。我可以在我的CSV中添加一个条目,但我看不到消息。对,但其中一些数据可能与数据库中已有的数据重复。无法捕获更新/添加的计数?所以您只想查看不同的条目?表的primery键是什么?票证表有一个唯一的
id
col,即pkSo。通过读取csv,您可以创建一组新票证。你没有检查这些票据是否已经在数据库中,那么sql alchemy怎么知道呢?那么根据@Joost下面的评论,如果我显式地添加它,我不会在t3上创建一个副本吗?在我的循环中,
db.session.add(t3)
<。在本例中,如果数据库中存在
t3
,它将不会重复,我只更改yoke字段并将其保存回去。