python写mysql

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

# 如果 插入数据重复,可以看下,是否没有加主键。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值