我正在尝试以下操作:
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
答案 0 :(得分: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;'