python - 如何使用 SqlAlchemy 增加多行

标签 python python-3.x postgresql python-2.7 sqlalchemy

如何通过增加某些字段(在我的例子中id)来更新多个记录?
我错过了一条记录,整个 table 都移动了。

如何在一笔交易或一次查询中做到这一点?或者最快的方法是什么?

尝试了类似下面的方法,但速度太慢了。

rows = session.query(Table).all()
for row in rows:
    row.id = row.id + 1
    session.commit()

还尝试使用类似的东西,但它对我不起作用:

session.query(Table)\
    .filter(Table.id == row.id)\
    .update({'id': row.id + 1})

我拥有的数据示例:

 ID   Value 
  1       A
  2       B
  3       C
               < -- D is missing here
  4       E
  5       F

在这里,如果是字母表 D 应该有 ID=4,那么我需要增加 EF

当你有 5 条记录时,这并不复杂,但当你有数百万或数十亿条记录时,就会出现此问题。

最佳答案

为了能够在序列中插入文档,
我手动创建了 new_id 列并将其添加到 Table 模型

new_object_id = 4

session.query(Table) \
    .filter(Table.id < new_object_id)\
    .update({Table.new_id: Table.id})

session.query(Table) \
    .filter(Table.id >= new_object_id)\
    .update({Table.new_id: Table.id + 1})

完成这些操作后,您应该能够在 id 序列中看到一个“漏洞”。

然后,在单独的查询中,手动重命名列 id -> old_idnew_id -> id
使用所有属性(主键、唯一等)更新了新“创建的”id 列。
删除了 old_id 列。

最后,插入所需的行。

总时间 - 几分钟,而不是几天。

我自己找到了适合我的解决方案。
如果有人知道如何优化手动步骤 - 欢迎您添加评论或编辑此答案。

关于python - 如何使用 SqlAlchemy 增加多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63241287/

相关文章:

sql - 将数据移动到另一个表

mysql - Rails db 中性数据透视表或交叉表

python - 为什么 re.findall 方法在 python 中返回错误的结果?

python - 由于objects.get 查询中的类型转换值而导致 Django 内部服务器错误

python - 使用分块将 Pandas DataFrame 写入字符串缓冲区

python - 在 Python 中,如何从包含多个类的文件中导入一个类?

postgresql - PostgreSQL ALTER COLUMN TYPE int 到 bigint 的持续时间

python - 比较两个列表并提取元素

python - 如何在Python语言中找到字典中最大元素的键?

python - Pandas 获取列包含所有行中的字符