【发布时间】:2021-01-07 13:41:07
【问题描述】:
我正在尝试了解如何根据我的需要修改 to_sql 函数。这是df_interface的数据框:
| YEAR | QUARTER | USER_ACCOUNT | BYTES | USER_CODE |
|------|---------|--------------|---------------|-----------|
| 2020 | 2 | SHtte34 | 7392577516389 | 2320885 |
| 2020 | 2 | Exel2 | 441712306685 | 348995 |
我正在尝试将其插入表 USER_USAGE(通过 oracle+cx 和 SQLAlchemy)。该表在插入前的内容为:
| YEAR | QUARTER | USER_ACCOUNT | BYTES | USER_CODE |
|------|---------|--------------|---------------|-----------|
| 2020 | 1 | SHtte34 | 34560 | 2320885 |
| 2020 | 1 | Exel2 | 5478290 | 348995 |
我希望仅在新季度 AND 帐户的情况下插入新行。基本上我想在插入后这样:
| YEAR | QUARTER | USER_ACCOUNT | BYTES | USER_CODE |
|------|---------|--------------|---------------|-----------|
| 2020 | 1 | SHtte34 | 7392577516389 | 2320885 |
| 2020 | 1 | Exel2 | 5478290 | 348995 |
| 2020 | 2 | SHtte34 | 7392577516389 | 2320885 |
| 2020 | 2 | Exel2 | 441712306685 | 348995 |
这是带有“替换”的代码:
conn = create_engine('oracle+cx_oracle://{}:{}@{}/?service_name={}'.format(s_uid,s_pwd,s_db,s_service))
df_interface.to_sql('USER_USAGE', conn, if_exists='replace',dtype={'USER_ACCOUNT': types.String(df_interface.USER_ACCOUNT.str.len().max()),'USER_CODE': types.String(df_interface.USER_CODE.str.len().max())},index=False)
这似乎也删除了上一季度 (1) 的值。替换后的输出:
| YEAR | QUARTER | USER_ACCOUNT | BYTES | USER_CODE |
|------|---------|--------------|---------------|-----------|
| 2020 | 2 | SHtte34 | 7392577516389 | 2320885 |
| 2020 | 2 | Exel2 | 441712306685 | 348995 |
Append 更接近我想要看到的,但是如果我不小心运行了两次程序,我会看到重复的行:
| YEAR | QUARTER | USER_ACCOUNT | BYTES | USER_CODE |
|------|---------|--------------|---------------|-----------|
| 2020 | 1 | SHtte34 | 7392577516389 | 2320885 |
| 2020 | 1 | Exel2 | 5478290 | 348995 |
| 2020 | 2 | SHtte34 | 7392577516389 | 2320885 |
| 2020 | 2 | Exel2 | 441712306685 | 348995 |
| 2020 | 1 | SHtte34 | 7392577516389 | 2320885 |
| 2020 | 1 | Exel2 | 5478290 | 348995 |
| 2020 | 2 | SHtte34 | 7392577516389 | 2320885 |
| 2020 | 2 | Exel2 | 441712306685 | 348995 |
如何使用“追加”,同时防止在无意运行时创建重复项?
【问题讨论】:
标签: python pandas oracle sqlalchemy