PyMySQL
MySQL 可应用于多种语言,可以使用Python来连接和操作MySQL数据库
什么是 PyMySQL?
1、PyMySQL 是在 Python3.x 版本中用于连接 MySQL 数据库的一个python包
Python2中则使用mysqldb
2、在使用 PyMySQL 之前,我们需要确保 PyMySQL 已安装
1、pycharm 安装
2、pip install PyMySQL(详情参考可见PIP安装)
PyMySQL的使用方法
import pymysql
-- 创建连接
conn = pymysql.connect("localhost","root","123456","mydb")
-- 使用 cursor() 方法创建游标,用于执行sql语句并获得结果
cursor = conn.cursor()
-- 使用 execute() 方法执行 SQL 查询
cursor.execute("SELECT VERSION()")
-- 关闭连接
conn.close()
插入数据
#增加数据
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
LAST_NAME, AGE, SEX, INCOME)
VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
try:
cursor.execute(sql)
# 提交当前游标的全部操作
conn.commit()
except:
conn.rollback()
获取查询结果
# 执行查询
insert_sql = "select * from class"
cursor.execute(insert_sql)
# 获取单条
one_data = cursor.fetchone()
print(one_data)
print("一条数据获取完毕")
# 获取多条
many_data = cursor.fetchmany(num)
print(many_data)
print("many数据获取完毕")
# 获取剩余全部
all_data = cursor.fetchall()
print(all_data)
print("all数据获取完毕")
for i in all_data:
print(i)
print(i[0])
print(i[1])
print(i[2])
print(i[3])
print "fname=%s,lname=%s,age=%s,sex=%s,income=%s" % (fname, lname, age, sex, income )
更新数据
update_sql = 'update stu set name="明明" where id =2'
try:
cursor.execute(update_sql)
print('sql执行完毕')
conn.commit()
print('sql提交完毕')
except:
conn.rollback()
删除数据
delete_sql = "delete from stu where id =2"
try:
cursor.execute(delete_sql)
conn.commit()
except:
conn.rollback()
关闭连接及游标
cursor.close()
conn.close()
练习
import pymysql
import traceback
from time import sleep
class PyMySQL(object):
create_table = 'create table stu(id int not null primary key auto_increment,name varchar(255) not null,age int, sex varchar(255))default charset=utf8'
select = 'select * from class'
update = 'update stu set name="明明" where id=2'
delete = 'delete from stu where id=9'
insert = 'insert into stu(name,age,sex) values("%s","%d","%s")' % ('小明', 2, "男")
def __init__(self, host, user, pwd, db):
self.conn = pymysql.connect(host, user, pwd, db)
self.cursor = self.conn.cursor()
def create_table_func(self):
self.cursor.execute(PyMySQL.create_table)
print('数据表创建完毕')
def insert_date(self):
try:
self.cursor.execute(PyMySQL.insert)
self.conn.commit()
except:
print(traceback.format_exc())
self.conn.rollback()
def update_data(self):
try:
self.cursor.execute(PyMySQL.update)
self.cursor.commit()
except:
print(traceback.format_exc())
self.conn.rollback()
def delete_data(self):
try:
self.cursor.execute(PyMySQL.delete)
self.conn.commit()
except:
print(traceback.format_exc())
self.conn.rollback()
def select_data(self):
self.cursor.execute(PyMySQL.select)
all_data = self.cursor.fetchall()
for i in all_data:
print('查询结果为:{}'.format(i))
if __name__ == '__main__':
my = PyMySQL('localhost','root','123456','python21_test')
my.create_table_func()
my.insert_date()
my.update_data()
my.delete_data()
my.select_data()
Connection Objects
Connection类提供以下方法
1、.close()
从这一点开始,连接将不可用;如果试图对连接执行任何操作,将会引发错误(或子类)异常
2、.commit()
- 将操作提交到数据库。
- 如果数据库支持自动提交特性,则必须首先关闭此功能。
- 可以提供一个接口方法将其重新打开。
3、.cursor()
创建游标,用于执行SQL语句
4、.rollback()
- 此方法是可选的,因为并非所有数据库都提供事务支持
- 如果数据库确实提供事务,此方法将导致数据库回滚到任何挂起事务的开始
- 在不首先提交更改的情况下关闭连接将导致执行隐式回滚。
Cursor Objects
游标对象具有以下常用方法
1、.close()
从这一点开始,游标对象将不可用;如果试图使用游标执行任何操作,将引发错误(或子类)异常。
2、.execute()
- 执行数据库操作(查询或命令等SQL语句)
- 返回值没有定义。
3、.fetchone()
- 获取查询结果的下一行,返回单个序列,或者在没有更多数据可用时返回None
- 如果execute()的调用没有生成任何结果,或者还没有执行,则会引发错误(或子类)异常。
4、.fetchall()
- 获取查询结果的所有(剩余)行,以序列的形式返回它们(例如元组列表)
- 如果前面对.execute*()的调用没有生成任何结果集,或者还没有发出调用,则会引发错误(或子类)异常。