gpt4 book ai didi

mysql - 在 python2.7 中使用 pool.apply_async 不会将值插入到 MySQL 表中

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

我正在尝试运行以下代码来为特定应用程序并行填充表。首先定义以下函数,该函数应该连接到我的数据库并使用给定的值执行 sql 命令(插入表中)。

def dbWriter(sql, rows) :
# load cnf file
MYSQL_CNF = os.path.abspath('.') + '/mysql.cnf'
conn = MySQLdb.connect(db='dedupe',
charset='utf8',
read_default_file = MYSQL_CNF)

cursor = conn.cursor()
cursor.executemany(sql, rows)
conn.commit()
cursor.close()

conn.close()

然后是这个片段:

pool = dedupe.backport.Pool(processes=2)

done = False

while not done :
chunks = (list(itertools.islice(b_data, step)) for step in
[step_size]*100)


results = []

for chunk in chunks :
print len(chunk)
results.append(pool.apply_async(dbWriter,
("INSERT INTO blocking_map VALUES (%s, %s)",
chunk)))

for r in results :

r.wait()

if len(chunk) < step_size :
done = True


pool.close()

一切正常,没有错误。但最后,我的表是空的,这意味着插入不成功。经过多次谷歌搜索后,我尝试了很多方法来解决这个问题(包括添加用于插入的列名称),但都没有成功。任何建议,将不胜感激。 (在python2.7、gcloud(ubuntu)中运行代码。注意粘贴到这里后缩进可能有点乱)

另请注意,“ block ”完全遵循所需的数据格式。

注意。这是此 example 的一部分请注意,我在上面的示例(链接)中唯一要更改的是,我将创建和插入表的步骤分开,因为我在 gcloud 平台上运行代码,并且它强制执行 GTID 标准。

最佳答案

解决方案是将 dbwriter 函数更改为:

conn = MySQLdb.connect(host = # host ip,
user = # username,
passwd = # password,
db = 'dedupe')
cursor = conn.cursor()
cursor.executemany(sql, rows)
cursor.close()
conn.commit()
conn.close()

关于mysql - 在 python2.7 中使用 pool.apply_async 不会将值插入到 MySQL 表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50051487/

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