mysql - 使用 Pandas 插入 MySQL 替换内容
问题描述
我正在尝试以下操作:
import sqlalchemy
import pandas as pd
con = sqlalchemy.create_engine('mysql+mysqlconnector://{0}:{1}@{2}:{3}/{4}'.format(user,password,host,port,db))
df = pd.DataFrame({'pass':["11","44","33"],'trust':[1,2,3],'name' : ['User 1', 'User 2', 'User 3']})
df.to_sql(con=con, name='check_data_5', if_exists='replace',index=False,method="multi")
上面的代码运行良好。我得到以下输出:
name pass trust
User 1 11 1
User 2 44 2
User 3 33 3
但是当我尝试更改数据框中的数据并将值插入 MySQL 时,我收到了替换的输出:
df = pd.DataFrame({'pass':["2233","44","33"],'trust':[1,2,3],'name' : ['User 1', 'User 2', 'User 3']})
df.to_sql(con=con, name='check_data_5', if_exists='replace',index=False,method="multi")
上述语句的输出是:
name pass trust
User 1 2233 1
User 2 44 2
User 3 33 3
而我期待:
name pass trust
User 1 11 1
User 1 2233 1
User 2 44 2
User 3 33 3
我虽然问题是因为我在表中没有主键。所以我先创建一个表然后执行上面的序列我收到了相同的响应。:
使用查询创建表:
create_table = 'create table `check_data_5` (`name` varchar(255) COLLATE utf8mb4_bin, `trust` int(1) NOT NULL, `pass` varchar(255) COLLATE utf8mb4_bin NOT NULL UNIQUE,PRIMARY KEY(`pass`) )AUTO_INCREMENT=1;'
请让我知道我在此过程中缺少什么。我需要解决这个问题。我想问题出在熊猫身上。使用Python 3.5.0
解决方案
看起来您打算使该name
字段成为主键,不是pass
吗?
create_table = 'create table `check_data_5` (`name` varchar(255) COLLATE utf8mb4_bin, `trust` int(1) NOT NULL, `pass` varchar(255) COLLATE utf8mb4_bin NOT NULL UNIQUE, PRIMARY KEY(`name`) ) AUTO_INCREMENT=1;'
推荐阅读
- r - 如何在mapdeck的路径中添加箭头
- html - 无法编译 pug 程序
- r - 使用 ggplot 将带有误差线的分组条形图(从 excel 导入的数据集)
- webpack - 在无服务器中获取 webpack.config.js 中的处理程序入口点
- android - 如何在异步模式下使用 PreferenceDataStore?
- vue.js - Vue:在组件内添加组件引用后未知的自定义元素
- pdfbox - 了解 PDFBox jar 文件
- java - 请解释一下这个Java代码如何从用户输入中识别最大数量?
- python - 从 gmail API 获取正确的电子邮件编码
- php - 如何从 mailgun 仪表板导出未送达邮件的电子邮件列表?