本地操作MySQL
python 版本 >=3.4之后,需要使用连接的库为PyMySQL
安装方法也很简单
pip install PyMySQL
PyMySQL: 封装了MySQL驱动的python驱动,能使python连接到MySQL
步骤
- 连接数据库
- 生成游标对象
- 执行SQL语句
- 关闭游标
- 关闭连接
此文章默认已在本地的MySQL创建好数据库
代码如下:
import pymysql
class Mysql(object):
def __init__(self):
try:
self.conn = pymysql.connect(
host='127.0.0.1', #连接名称,本地地址默认127.0.0.1
user='root', #用户名
passwd='123456', #密码
port=3306, #端口,默认3306
db='demo', #数据库名称
charset='utf8' #字符编码
)
except Exception as e:
print(e)
else:
print('连接成功!')
#获取游标
self.cur = self.conn.cursor()
#执行操作:创建,增删改查
#创建表
def create(self):
try:
sql = '''
CREATE TABLE Student(
Id INT PRIMARY KEY,
Name CHAR(20),
Age CHAR(20)
)
'''
#执行sql语句
selg.excute(sql)
except Exception as e:
print(e)
print('创建失败')
else:
print('创建成功')
#增加语句
def add(self):
sql = '''INSERT INTO Student VALUES (1,'小明',15),(2,'小红',16)'''
result =self.cur.excute(sql)
if result:
#提交增加的数据到表中
self.conn.commit()
print('插入成功')
else:
self.conn.rollback()
print('插入失败')
#删除语句
def delete(self):
sql = '''DELETE from Student where Id=2'''
result =self.cur.excute(sql)
if result:
self.conn.commit()
print('删除成功')
else:
self.conn.rollback()
print('删除失败')
#修改语句
def update(self):
sql = '''UPDATE Student SET Name='小明' where Id=3'''
result =self.cur.excute(sql)
if result:
self.conn.commit()
print('修改成功')
else:
self.conn.rollback()
print('修改失败')
#查询语句
def inquire(self):
sql = '''SELECT * from Student'''
self.cur.excute(sql)
#用fetchall获取所有数据,以元组的形式显示出来,注意:fetchone时获取一条数据,同样也是以元组的形式显示出来
result = self.cur.fetchall()
for i in result:
print(i)
#关闭
def close(self):
self.cur.close()
self.conn.close()
远程操作MySQL
远程即非本地的数据库,目标数据库放在了服务器上
与本地连接MySQL的区别在于,需要使用额外的sshtunnel库中的SSHTunnelForwarder函数,在函数里面带上服务器登录信息参数就可
为啥要使用SSHTunnelForwarder隧道连接mysql
考虑到安全因素,服务器只允许通过ssh访问连接。也就是说如果数据库放在了服务器A上,只允许服务器B来访问,而自己在本机C上,那么就要通过ssh连接服务器B,再来连接服务器A,这样就可以达到目的(本机C访问服务器A上的数据)
通俗一点来说,在本机上,我一般用xshell来连接远程服务器。xshell就可以当作是服务器B,它当作中介者的角色
步骤
- 连接ssh
- 再通过ssh连接数据库
- 生成游标对象
- 执行SQL语句
- 关闭游标
- 关闭连接
代码如下:
import pymysql
import sshtunnel
from sshtunnel import SSHTunnelForwarder
class Mysql(object):
def __init__(self):
try:
with SSHTunnelForwarder(
('xx.xxx.xx.xx',22), #这里填写服务器的IP地址,端口是22
ssh_username = "root",# ssh的用户名
ssh_password = "pwd", #ssh的密码
remote_bind_address=('xx.xxx.xx.xx',3306)) as server:
print('SSH连接成功') #这里也是填写服务器的IP地址,端口是MySQL的3306端口
conn = pymysql.connect(
host='127.0.0.1',
port=server.local_bind_port,
user='',
passwd='',
db=''
)
except Exception as e:
print(e)
else:
print('连接成功!')
#获取游标
self.cur = self.conn.cursor()
print('游标获取成功')
#增加语句
def add(self):
sql = '''INSERT INTO Student VALUES (1,'小明',15),(2,'小红',16)'''
result =self.cur.excute(sql)
if result:
#提交增加的数据到表中
self.conn.commit()
print('插入成功')
else:
self.conn.rollback()
print('插入失败')
def close(self):
self.cur.close()
self.conn.close()