Python(9):连接MySQL

来源:互联网 发布:h3c 把端口加入vlan 编辑:程序博客网 时间:2024/06/18 03:35

关于MySQL的文章。

Review:MySQL复习

下载pymysql。

导入包。

import pymysql.cursors

连接数据库。

# 连接数据库connect = pymysql.Connect(    host='localhost',    port=3306,    user='xxx',    passwd='xxx',    db='xx_db',    charset='utf8')


获取游标。

cursor = connect.cursor()

别人总结的一些常用函数。

pymysql.Connect()参数说明host(str):      MySQL服务器地址port(int):      MySQL服务器端口号user(str):      用户名passwd(str):    密码db(str):        数据库名称charset(str):   连接编码connection对象支持的方法cursor()        使用该连接创建并返回游标commit()        提交当前事务rollback()      回滚当前事务close()         关闭连接cursor对象支持的方法execute(op)     执行一个数据库的查询命令fetchone()      取得结果集的下一行fetchmany(size) 获取结果集的下几行fetchall()      获取结果集中的所有行rowcount()      返回数据条数或影响行数close()         关闭游标对象

下面就是CRUD操作。

增、删、改、查、提交事务、回滚。

下面的代码就直接粘贴别人的了。

# 插入数据sql = "INSERT INTO trade (name, account, saving) VALUES ( '%s', '%s', %.2f )"data = ('雷军', '13512345678', 10000)cursor.execute(sql % data)connect.commit()print('成功插入', cursor.rowcount, '条数据')# 修改数据sql = "UPDATE trade SET saving = %.2f WHERE account = '%s' "data = (8888, '13512345678')cursor.execute(sql % data)connect.commit()print('成功修改', cursor.rowcount, '条数据')# 查询数据sql = "SELECT name,saving FROM trade WHERE account = '%s' "data = ('13512345678',)cursor.execute(sql % data)for row in cursor.fetchall():    print("Name:%s\tSaving:%.2f" % row)print('共查找出', cursor.rowcount, '条数据')# 删除数据sql = "DELETE FROM trade WHERE account = '%s' LIMIT %d"data = ('13512345678', 1)cursor.execute(sql % data)connect.commit()print('成功删除', cursor.rowcount, '条数据')# 事务处理sql_1 = "UPDATE trade SET saving = saving + 1000 WHERE account = '18012345678' "sql_2 = "UPDATE trade SET expend = expend + 1000 WHERE account = '18012345678' "sql_3 = "UPDATE trade SET income = income + 2000 WHERE account = '18012345678' "try:    cursor.execute(sql_1)  # 储蓄增加1000    cursor.execute(sql_2)  # 支出增加1000    cursor.execute(sql_3)  # 收入增加2000except Exception as e:    connect.rollback()  # 事务回滚    print('事务处理失败', e)else:    connect.commit()  # 事务提交    print('事务处理成功', cursor.rowcount)
应该在finally里面写,关闭连接。即三段式结构:try、catch、finally。

关闭连接。

# 关闭连接cursor.close()connect.close()

查了一下,还有一次性直接执行多条语句的写法。


sql = "INSERT INTO china_index (_date,_sse50_total_return_index,_csi300_total_return_index,_signal_sse50,_signla_csi300,_remark) VALUES (%s,%s,%s,%s,%s,%s);"

不管是什么数据类型,都用%s,不用加引号

idx_mat = idx_df.valuesvals = []for t in range(idx_mat.shape[0]):    val = (idx_mat[t,2],idx_mat[t,0],idx_mat[t,1],0,0,'')    vals.append(val)ret = cursor.executemany(sql, vals)connect.commit()
有人说,for循环执行sql比这个执行慢多了。

那你for循环以后,不要commit嘛…

拼N条sql,统一提交一次嘛。


0 0
原创粉丝点击