#### 使用pymysql操作数据库
##### 1、安装
```
$ pip install pymysql
或者
$ python -m pip install pymysql
```
##### 2、操作
> 查询操作
```
import pymysql
# 打开数据库连接
db = pymysql.connect("10.26.171.90","ism","Ism@123","ism_aggregation",charset="utf8")
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# SQL 查询语句
sql = "SELECT * FROM t_fund_info limit 10"
try:
# 执行SQL语句
cursor.execute(sql)
# 获取所有记录列表
results = cursor.fetchall()
for row in results:
vc_fund_id = row[0]
vc_fund_name = row[1]
vc_fund_simple_name = row[2]
except:
print ("Error: unable to fetch data")
# 关闭数据库连接
db.close()
```
- fetchone(): 获取第一行数据。结果集是一个对象
- fetchmany(N): 获取前N行数据
- fetchall(): 获取所有返回结果
```
游标类型默认为元组,可以设置为其他形式
字典形式:
cur = db.cursor(cursor=pymysql.cursors.DictCursor)
```
> 增删改
db.commit()后才会更新到数据库追踪
```
import pymysql
# 打开数据库连接
db = pymysql.connect(host='xxx',port= 3306,user = 'xxx',passwd='xxx',db='xxx')
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# SQL 更新语句
sql = "INSERT INTO t_fund_info(fund_id, fund_name, a, b, c, d, e, f, g, h, i, j) VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')" % (id, name, a_value, b_value, c, d, e, f, g, h, i, j)
try:
# 执行SQL语句
cursor.execute(sql)
# 提交到数据库执行
db.commit()
except:
# 发生错误时回滚
db.rollback()
# 关闭数据库连接
db.close()
```
##### 3、游标操作
```
在fetch数据时按照顺序进行,可以使用cursor.scroll(num,mode)来移动游标位置,如:
cursor.scroll(1,mode='relative') # 相对当前位置移动
cursor.scroll(2,mode='absolute') # 相对绝对位置移动
```
##### 4、调用存储过程
```
#无参数存储过程
cursor.callproc('p1') #等价于cursor.execute("call p1()")
#有参数存储过程
cursor.callproc('p2', args=(1, 2, 3, 4))
#获取执行完存储的参数,参数@开头
cursor.execute("select @p2,@_p2_1,@_p2_2,@_p2_3")
```