Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在sqlalchemy中编辑表的所有记录?_Python_Sqlalchemy - Fatal编程技术网

Python 如何在sqlalchemy中编辑表的所有记录?

Python 如何在sqlalchemy中编辑表的所有记录?,python,sqlalchemy,Python,Sqlalchemy,考虑以下代码: for entry in db.session.query(MyTable): entry.fieldX = calculate(entry.fieldA, entry.fieldB, entry.fieldC) db.session.add(entry) ### IS this line required or is it implicit db.session.commit() 是否需要显式添加到会话?以下是更好的方法吗 entries = [] for entry

考虑以下代码:

for entry in db.session.query(MyTable):
  entry.fieldX = calculate(entry.fieldA, entry.fieldB, entry.fieldC)
  db.session.add(entry) ### IS this line required or is it implicit
db.session.commit()
是否需要显式添加到会话?以下是更好的方法吗

entries = []
for entry in db.session.query(MyTable):
  entry.fieldX = calculate(entry.fieldA, entry.fieldB, entry.fieldC)
  entries.append(entry)
db.session.add_all(entries)
db.session.commit()

您不需要将
条目
对象添加到会话中,因为它们已经在加载它们的
会话
中。因此,这就足够了:

for entry in db.session.query(MyTable):
    entry.fieldX = calculate(entry.fieldA, entry.fieldB, entry.fieldC)
db.session.commit()

生成一个显式的update语句供DBMS执行可能更有效,这将节省程序获取每一行并再次保存它的工作。我们可以看看关于
calculate()
函数实现的一些细节吗?@IfLoop-Hmm.calculate实际上使用了其他映射。因此,在这种情况下,这将无济于事。