使用 Pandas 中的 to_sql() 方法实现已存在的数据 REPLACE INTO 的效果,原表不存在的则继续追加写入表
时间: 2024-03-06 14:50:42 浏览: 327
要实现这种效果,你可以使用 Pandas 的 to_sql() 方法配合 SQL 语句中的 INSERT INTO ... ON DUPLICATE KEY UPDATE 语法来实现。具体地,当数据表中已经存在相同的数据时,使用 REPLACE INTO 语法替换旧数据,否则使用 INSERT INTO 语法插入新数据。下面是一个示例代码:
```
import pandas as pd
from sqlalchemy import create_engine
# 创建数据库连接
engine = create_engine('mysql+pymysql://username:password@host:port/database')
# 要插入的数据
data = pd.DataFrame({'id': [1, 2, 3], 'name': ['Alice', 'Bob', 'Charlie']})
# 将数据插入到数据库中
with engine.begin() as conn:
# 使用 INSERT INTO ... ON DUPLICATE KEY UPDATE 语法插入或替换数据
conn.execute("""
INSERT INTO table_name (id, name)
VALUES %s
ON DUPLICATE KEY UPDATE name=VALUES(name)
""" % ','.join(['(%s, "%s")' % (row['id'], row['name']) for _, row in data.iterrows()]))
```
在这个例子中,我们使用 with engine.begin() as conn 语句获取数据库连接,并在一个事务中执行插入或替换操作。我们使用 Pandas 的 iterrows() 方法遍历数据,并使用字符串拼接生成 SQL 语句。注意,我们使用了 ON DUPLICATE KEY UPDATE 语法来实现 REPLACE INTO 的效果,其中 VALUES(name) 表示使用新数据的 name 值来替换旧数据的 name 值。如果数据表中不存在相同的数据,则会执行 INSERT INTO 语法插入新数据。
阅读全文