PyMysql
PyMysql是为了替代Python-MySQL而生,纯python打造,Python-MySQL虽然有更好的性能,但是在python3中已经不再受到支持,而PyMySQL接口兼容Python-MySQL,安装方便。
简单安装
1 | pip install pymysql |
如果没法联网,需要进行离线安装,例如:
1 | pip install pymysql-x.x.x.tar.gz |
导入
1 | import pymysql |
连接
1 | def connect_mysql_db(): |
2 | return pymysql.connect(host='127.0.0.1', |
3 | port=3306, |
4 | user='root', |
5 | password='passwd', |
6 | database='db_name', |
7 | charset='utf8') |
查询
1 | def query_name(name): |
2 | sql_str=("select * from all_name where name=%s" % (name)) |
3 | logging.info(sql_str) |
4 | con=connect_mysql_db() |
5 | cur=con.cursor() |
6 | cur.execute(sql_str) |
7 | rows=cur.fetchall() |
8 | cur.close() |
9 | con.close() |
10 | |
11 | assert len(rows) == 1,'Fatal Error: name dose not exists' |
12 | return rows[0][0] |
批量插入
1 | ids=[('1234','CAD'),('5678','HKD')] |
2 | |
3 | con=connect_mysql_db() |
4 | cur=con.cursor() |
5 | try: |
6 | cur.executemany('insert into t_order (f_id,f_type,f_time) values (%s,%s,now())',ids) |
7 | assert cur.rowcount == len(ids),'my error message' |
8 | con.commit() |
9 | except Exception as e: |
10 | con.rollback() |
11 | logging.exception('insert operation error') |
12 | finally: |
13 | cur.close() |
14 | con.close() |
较常见的参数
连接:
- host:数据库主机名.默认是用本地主机.
- user:数据库登陆名.默认是当前用户.
- passwd:数据库登陆的秘密.默认为空.
- db:要使用的数据库名.没有默认值.
- port:MySQL服务使用的TCP端口.默认是3306.
- charset:数据库编码.
连接对象也提供了对事务操作的支持,标准的方法:
- commit() 提交
- rollback() 回滚
执行sql语句和接收返回值:
- cursor=conn.cursor()
- n=cursor.execute(sql,param)
cursor用来执行命令的方法:
- callproc(self, procname, args):用来执行存储过程,接收的参数为存储过程名和参数列表,返回值为受影响的行数
- execute(self, query, args):执行单条sql语句,接收的参数为sql语句本身和使用的参数列表,返回值为受影响的行数
- executemany(self, query, args):执行单条sql语句,但是重复执行参数列表里的参数,返回值为受影响的行数
- nextset(self):移动到下一个结果集
cursor用来接收返回值的方法:
- fetchall(self):接收全部的返回结果行.
- fetchmany(self, size=None):接收size条返回结果行.如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据.
- fetchone(self):返回一条结果行.
- scroll(self, value, mode=’relative’):移动指针到某一行.如果mode=’relative’,则表示从当前所在行移动value条,如果mode=’absolute’,则表示从结果集的第一行移动value条.