python连接数据库

1、使用Python连接MySql数据库

直接连接MySql:

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()         关闭游标对象

 

实例:引用pymysql

import pymysql


db = pymysql.connect(host='127.0.0.1',  # 数据库地址
                     user='root',  # 用户名
                     db='test',  # 应用的数据库名
                     passwd='123456',  # 用户密码
                     port=3306,  # 端口
                     charset='utf8'  # 编码规则
                     )

# 创建游标
cursor = db.cursor()
search_stu = "SELECT * FROM `students` where sno = %s"
prams = '108'
cursor.execute(search_stu % prams) 
info = cursor.fetchone()
print(info)
# 关闭连接
cursor.close()
db.close()

2、通过跳板机连接Mysql

很多环境为了安全起见,大多数数据库配置了堡垒机(跳板机),需要通过跳板机才能访问数据库

这里需要引用 sshtunnel 库

实例应用:

import pymysql
import json
import re
from sshtunnel import SSHTunnelForwarder

server = SSHTunnelForwarder(
    ssh_address_or_host=('*.*.*.*', 10037),  # 指定ssh登录的跳转机的address
    ssh_username='root',  # 跳转机的用户
    ssh_password='123456',  # 跳转机的密码
    remote_bind_address=('*.*.*.*', 3306)  # 数据库的地址及端口
)
# 启动服务
server.start()
# 连接数据库
db = pymysql.connect(
    host='127.0.0.1',  # 必须为127.0.0.1
    port=server.local_bind_port,
    user='******',
    passwd='******',
    db='******'
)
# 创建游标对象
cur = db.cursor()
sql = "SELECT COUNT(DISTINCT identity_card) FROM `m_manual_audit_verify` WHERE exam_date ='%s'"
prams = '2019-03-15'
cur.execute(sql % prams)

data = cur.fetchall()
# print(type(data))
result_manal_audit = data[0][0]  # 直接显示查询的数据结果,方便后续比较
print(result_manal_audit)
# data_json = json.dumps(data)
# print(type(data_json))
# print(data_json)
# pattern = re.compile(r'[^\d]+(\d+)[^\d]+') # 正则匹配数字
# res = re.findall(pattern, data_json)
# print(type(res))
# print(res[0])

cur.close()
db.close()

 

posted @ 2019-03-26 10:53  水凤火凰  阅读(227)  评论(0)    收藏  举报