[英]how to update a mysql table efficiently with a pandas dataframe?
我正在使用Airflow PythonOperator进行ETL更新SCD1维度表( dim_user
)。
mysql维度表的结构:
| user_key | open_id | gender | nickname | mobile | load_time | updated_at |
|----------|---------------------|--------|----------|-------------|---------------------|---------------------|
| 117 | ohwv90JTgZSn******* | 2 | ABC | ************| 2019-05-24 10:12:44 | 2019-05-23 19:00:43 |
在python脚本中,我有一个相同的结构(user_key和load_time列除外)pandas df_users_updated
。
现在我想在匹配的open_id
字段的条件下更新mysql表:
# database connection
conn = create_engine(db_conn_str)
# update the rows with a for loop
for index, row in df_users_updated.iterrows():
info = dict(row)
conn.execute('update dim_user set gender=%s, nickname=%s, mobile=%s, updated_at=%s where open_id=%s',
(info['gender'], info['nickname'], info['mobile'], info['updated_at'], info['open_id']))
conn.dispose()
问题是我在df_users_updated中只有1000行,它需要超过10分钟才能执行这些更新查询。
有一个更好的方法吗?
根据我的经验,有一些技巧可以提高性能。
mysqlclient
lib, cursor.executemany(sql, params)
方法 tuple
类型的参数
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.