如何基于DataFrame字段值替换SQL模板变量生成新列
如何用DataFrame字段批量生成SQL更新语句
需求说明
基于包含name、zip_code、new_zip_code、id字段的DataFrame,批量生成SQL更新语句并存储为新列query:
- SQL模板中
SET zip_code =后的数值替换为DataFrame的new_zip_code字段值 WHERE id =后的内容替换为DataFrame的id字段值(需保留单引号)AND zip_code =后的数值替换为DataFrame的zip_code字段原值
实现代码
使用Pandas的apply函数结合字符串格式化,遍历每一行生成对应SQL语句:
import pandas as pd # 示例DataFrame data = { 'name': ['Jeffrey', 'Palmas'], 'zip_code': [85698, 89723], 'new_zip_code': [75813, 36712], 'id': ['o5FOLOdM1UtOXDB5_WDbWA', '9567LEKDKLD95DDF_67_DD'] } df = pd.DataFrame(data) # 生成query列 df['query'] = df.apply( lambda row: f"UPDATE `hospitals` SET zip_code = {row['new_zip_code']} WHERE id = '{row['id']}' AND zip_code = {row['zip_code']}", axis=1 )
执行结果
生成的DataFrame如下:
| name | zip_code | new_zip_code | id | query |
|---|---|---|---|---|
| Jeffrey | 85698 | 75813 | o5FOLOdM1UtOXDB5_WDbWA | UPDATE hospitals SET zip_code = 75813 WHERE id = 'o5FOLOdM1UtOXDB5_WDbWA' AND zip_code = 85698 |
| Palmas | 89723 | 36712 | 9567LEKDKLD95DDF_67_DD | UPDATE hospitals SET zip_code = 36712 WHERE id = '9567LEKDKLD95DDF_67_DD' AND zip_code = 89723 |
注意事项
如果id字段包含单引号等特殊字符,需要转义以避免SQL语法错误,可修改代码如下:
df['query'] = df.apply( lambda row: f"UPDATE `hospitals` SET zip_code = {row['new_zip_code']} WHERE id = '{row['id'].replace(\"'\", \"''\")}' AND zip_code = {row['zip_code']}", axis=1 )
内容的提问来源于stack exchange,提问作者coding
相关产品推荐
相关产品推荐

