【发布时间】:2022-11-11 04:33:31
【问题描述】:
我有一个如下所示的数据框:
import pandas as pd
student_dict = {
"ID":[101,102,103,104,105],
"Student":["AAA","BBB","CCC","DDD","EEE"],
"Mark":[50,100,99,60,80],
"Address":["St.AAA","St.BBB","St.CCC","St.DDD","St.EEE"],
"PhoneNo":[1111111111,2222222222,3333333333,4444444444,5555555555]
}
df = pd.DataFrame(student_dict)
ID Student Mark Address PhoneNo
101 AAA 50 St.AAA 1111111111
102 BBB 100 St.BBB 2222222222
103 CCC 99 St.CCC 3333333333
104 DDD 60 St.DDD 4444444444
105 EEE 80 St.EEE 5555555555
MySql 表(StudentTable):
CREATE TABLE StudentTable(
ID int,
Student varchar(255),
Mark int,
Address varchar(255),
PhoneNo varchar(20),
primary key (ID)
);
将数据框 df 插入到我使用的 MySQL 表中:
import pymysql
pymysql.install_as_MySQLdb()
from sqlalchemy import create_engine
# Create engine
engine = create_engine('mysql://user:pass@127.0.0.1/dbname')
# Create the connection and close it(whether successed of failed)
with engine.begin() as connection:
df.to_sql(name='StudentTable', con=connection, if_exists='append', index=False)
student_dict2 = {
"ID":[122,102,123],
"Student":["XXX","YYY","ZZZ"],
"Mark":[60,80,95],
"Address":["St.XXX","St.YYY","St.ZZZ"],
"PhoneNo":[1111111110,2222222222,3333333315]
}
df = pd.DataFrame(student_dict2)
ID Student Mark Address PhoneNo
122 XXX 60 St.XXX 1111111110
102 YYY 80 St.YYY 2222222222
123 ZZZ 95 St.ZZZ 3333333315
它会抛出一个错误
IntegrityError: (pymysql.err.IntegrityError) (1062, "Duplicate entry '102' for key 'StudentTable.PRIMARY'")
它不会将不重复的其他行插入到StudentTable 中。
我需要的是,它需要将不重复的行插入到表中,并且仅对重复的行抛出错误.有没有办法在StudentTable 中创建一个时间戳列,它会自动捕获数据插入时间
【问题讨论】:
标签: python mysql pandas dataframe