我正在尝试运行以下代码来为特定应用程序并行填充表。首先定义以下函数,它应该连接到我的db并使用给定的值执行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)。请注意,粘贴后可能会有点混乱)
请注意,“chunk”完全遵循所需的数据格式。
请注意。这是example的一部分 请注意,我在上面的例子(链接)中唯一改变的是我将创建和插入表格的步骤分开,因为我在gcloud平台上运行我的代码并且它强制执行GTID标准。
答案 0 :(得分:1)
解决方案是将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()