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的编码太长导致的。

  1. 建立连接
def mydb():
    '''连接数据库,创建游标'''
    db = mysql.connect(host='', port=, user='', passwd=', db='', charset='')
    return db

3 . 多行插入:

def insert_data(cur, db, data_info):
    data_info['f_type'] = [1]*data_info.shape[0]
    sql = "INSERT INTO tb (f_type, f_uin, f_cid, createdate, proba_1) VALUES (%s, %s, %s, %s, %s)"
    values = data_info[['f_type', 'uin', 'f_cid', 'active_day', 'proba_1']].values
    result = tuple([tuple(values[val]) for val in range(data_info.shape[0])])  ## 插入数据需转位元组
    cur.executemany(sql, result)
    db.commit()

4 . 有则更新,无则插入

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()

你可能感兴趣的:(python学习)