gpt4 book ai didi

python - 从可迭代对象中获取一些元素,执行某些操作,再获取一些元素,等等

转载 作者:行者123 更新时间:2023-12-01 05:23:29 24 4
gpt4 key购买 nike

以下是一些 Python 代码,将数据从一台服务器中的一个数据库移动到另一台服务器中的另一个数据库:

cursor1.execute(""" 
SELECT d1.Doc_Id , d2.Doc_Id
FROM Document d1
INNER JOIN Reference r ON d1.Doc_Id = r.Doc_Id
INNER JOIN Document d2 ON r.R9 = d2.T9
""")

cursor2.execute("START TRANSACTION")
cursor2.executemany( "INSERT IGNORE INTO citation_t(citing_doc_id, cited_doc_id) VALUES (?,?)",
cursor1 )
cursor2.execute("COMMIT")

现在,为了便于说明,假设事务在提交之前耗尽了目标硬盘中的空间,因此提交丢失。但我使用事务是出于性能原因,而不是原子性。因此,我想用提交的数据填充硬盘驱动器,使其保持完整状态,以便我可以将其展示给我的老板。再次强调,这只是为了说明,真正的问题在下面。在这种情况下,我宁愿这样做:

cursor1.execute(""" 
SELECT d1.Doc_Id , d2.Doc_Id
FROM Document d1
INNER JOIN Reference r ON d1.Doc_Id = r.Doc_Id
INNER JOIN Document d2 ON r.R9 = d2.T9
""")

MAX_ELEMENTS_TO_MOVE_TOGETHER = 1000

dark_spawn = some_dark_magic_with_iterable( cursor1, MAX_ELEMENTS_TO_MOVE_TOGETHER )

for partial_iterable in dark_spawn:
cursor2.execute("START TRANSACTION")
cursor2.executemany( "INSERT IGNORE INTO citation_t(citing_doc_id, cited_doc_id) VALUES (?,?)",
partial_iterable )

cursor2.execute("COMMIT")

我的问题是,填充 some_dark_magic_with_iterable 的正确方法是什么,即创建某种中间有暂停的迭代器?

最佳答案

只需创建一个生成器即可! :P

def some_dark_magic_with_iterable(curs, nelems):
res = curs.fetchmany(nelems)
while res:
yield res
res = curs.fetchmany(nelems)

好吧,好吧...对于通用迭代器...

def some_dark_magic_with_iterable(iterable, nelems):
try:
while True:
res = []
while len(res) < nelems:
res.append(iterable.next())
yield res
except StopIteration:
if res:
yield res

关于python - 从可迭代对象中获取一些元素,执行某些操作,再获取一些元素,等等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21854285/

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