1. Python mysql 插入数据时,遇到如下问题:
1)python AttributeError: ‘numpy.float64’ object has no attribute ‘translate’
解决方法:生成dataframe 时,指定 数据类型, 将numpy.float64 转位numpy.object
2)插入数据后,某个用户id的记录书异常多,不符合预期,是因为数据类型越界,默认最大类型,结构都变为:2147483647
解决方法: 建表时,将字段类型int 改为bigint类型。
主要是因为某类id的编码太长导致的。
2. 建立db连接
def mydb():
'''连接数据库,创建游标'''
db = mysql.connect(host='', port=, user='', passwd=', db='', charset='')
return db
3 . 插入数据:
def insert_data(cur, db, data_info):
sql = "INSERT INTO testd, f_sugg_word, f_type) VALUES (%s, %s, %s)" \
"ON DUPLICATE KEY UPDATE f_type = VALUES(f_type)"
cur.executemany(sql, data_info)
db.commit()
cur.close()
db.close()
# 注意 必须要加,db.commit() 否则插入数据为null。
# 必须要加, cur.close()
def data_pro(df_suggest):
values = df_suggest[['f_id', 'f_sugg_word', 'f_type']].values
data_info = [tuple(v) for v in values]
print(data_info[:10])
return data_info
db = mydb()
cur = db.cursor()
if df_suggest.shape[0] >= 1:
data_info = data_pro(df_suggest)
insert_data(cur, db, data_info)
4 . ON DUPLICATE KEY UPDATE
如果主键存在,则进行update操作,否则执行insert操作。
def insert_data(cur, db, data_info):
sql = "INSERT INTO tb (f_type, f_cid, f_feature) VALUES (%s, %s, %s)" \
"ON DUPLICATE KEY UPDATE f_feature = VALUES(f_feature)"
cur.executemany(sql, data_info)
db.commit()
cur.close()
db.close()
5. 创建带主键的表
CREATE TABLE test (
f_id char(64) NOT NULL PRIMARY KEY,
f_sugg_word char(190) NOT NULL,
f_type int(11) NOT NULL,
f_update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
# 如果 插入数据重复,可以看下,是否没有加主键。