首页 > 解决方案 > 使用 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

标签: mysqlpython-3.xpandas

解决方案


看起来您打算使该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;'

推荐阅读