gpt4 book ai didi

python - 如何使用 SQLAlchemy 将成批的条目提交到 SQL 数据库中以防止出错?

转载 作者:行者123 更新时间:2023-11-28 21:21:29 24 4
gpt4 key购买 nike

我可以使用 SQLAlchemy 将哪些条目提交到 SQL 数据库并容错?将一大批条目一起提交效率要高得多,但是如果其中一个条目中存在错误,例如整数列中的文本,则无法将整个批处理保存到数据库中。我下面的解决方法是单独提交条目,但这种方法可能会创建太多与 mysql 服务器的连接,尤其是在并行运行时。是否有更有效的方式将条目作为批处理提交并避免出错?

def commitentry(database, enginetext, verbose = False):
"""
Takes a database object and text string that defines the SQL
engine and adds all entries in the database list to the SQL
database.
"""

engine = create_engine(enginetext)
Session = sessionmaker()
Session.configure(bind=engine)
session = Session()
counter = 0
for entry in database:
try:
session.add(entry)
session.commit()

except Exception, e:
print("Commit Error")
session.rollback()


if verbose:
print(e)

finally:
counter += 1
if verbose:
print(counter, counter/float(len(database)))

if verbose:
print("Entries saved!")
session.close()

最佳答案

我认为您的方向不对。据我所知,当单个条目中出现错误时,您无法避免在整个批处理发生回滚的情况下提交批处理。

在添加到 session 之前,您应该 try catch 代码中的错误,即

batch_size = 500 
for i, entry in enumerate(database_list):
try:
validate(entry)
#your custom function that validates the entry,
#throws ValidationError on error and/or tries to 'fix' the entry
session.add(entry)
except ValidationError:
pass
if (i + 1) % batch_size == 0:
#commit every `batch_size` entries
session.commit()

最后,如果批量插入花费的时间太长,您可能希望使用 insert() 而不是 session API。

关于python - 如何使用 SQLAlchemy 将成批的条目提交到 SQL 数据库中以防止出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21271345/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com