【Python】PyMySQL 连接 MySQL数据库
PyMySQL连接 Mysql
- 安装 PyMySQL
- PyMySQL 连接数据库
- 创建数据库(数据库必须存在)
- 创建数据表
- 插入操作
- 查询操作
- 更新操作
- 删除操作
- 综合案例
- Connection Object
- Cursor Objects
两种方法进行数据库的连接分别是 PyMySQL 和 mysql.connector,我们学习 PyMySQL。
操作步骤:
- 连接数据库
conn = pymysql.connect()
- 生成游标对象
curosr = conn.cursor()
- 执行SQL语句
cursor.execute(sql)
- 关闭游标
cursor.close()
- 关闭连接
conn.closr()
PyMySQL 是在 Python3.4 以后版本中用于连接 MySQL 数据库的一个模块;
Python2 中则使用 mysqldb
安装 PyMySQL
首先要安装这个模块:
pip install pymysql
检查一下是否安装成功:
pip show pymysql
PyMySQL 连接数据库
import pymysql
# 创建数据库连接
conn = pymysql.connect(
host = '127.0.0.1', # 连接主机, 默认127.0.0.1
user = 'root', # 用户名
passwd = '1234',# 密码
port = 3306, # 端口,默认为3306
db = 'test', # 数据库名称
charset = 'utf8' # 字符编码
)
# 生成游标对象 cursor
cursor = conn.cursor()
# 查询数据库版本
cursor.execute("select version()") # 返回值是查询到的数据数量
# 通过 fetchall方法获得数据
data = cursor.fetchone()
print("Database Version:%s" % data)
cursor.close() # 关闭游标
conn.close() # 关闭连接
创建数据库(数据库必须存在)
由于连接数据库时需要填要连接的数据库名,所以创建数据库只能做到:删除已经存在的数据库,再重新创建,相当于 清空数据库 的作用。
# 创建数据库 test
cursor.execute("drop database if exists test") #如果数据库已经存在,那么删除后重新创建
sql = "create database test"
cursor.execute(sql)
创建数据表
# 创建数据表
cursor.execute("drop table if exists employee") # 如果数据表已经存在,那么删除后重新创建
sql = """ CREATE TABLE employee ( id VARCHAR(20) NOT NULL, name VARCHAR(20), age INT, income FLOAT ) """
cursor.execute(sql)
插入操作
# 数据库插入数据
sql = "INSERT INTO employee VALUES ('1', '张三', 20, 5000)"
try:
cursor.execute(sql)
# 提交当前游标的全部操作
conn.commit()
except:
print("expection!")
conn.rollback()
# 查看更新后的结果
sql = "SELECT* FROM employee"
cursor.execute(sql)
data = cursor.fetchall()
print(data)
查询操作
只查询出一条数据:cursor.fetchone()
sql = "SELECT* FROM employee"
cursor.execute(sql) # 返回值是查询到的数据数量
data = cursor.fetchone() # 查询一条数据
print(data)
查询数据库中所有数据:cursor.fetchall()
# 数据库查询数据
sql = "SELECT * FROM employee"
cursor.execute(sql) # 返回值是查询到的数据数量
data = cursor.fetchall() # 查询一条数据
print(data)
查询指定条件的数据:查询满足条件 income > 5000
的数据。
# 查询指定条件的数据
sql = " SELECT * FROM employee WHERE income > '%d' " % (5000)
cursor.execute(sql) # 返回值是查询到的数据数量
data = cursor.fetchone()
print(data)
更新操作
# 更新数据库
sql = " UPDATE employee SET age = age + 1 WHERE age < '%d' " % (25)
try:
cursor.execute(sql)
conn.commit()
except:
print("expection!")
conn.rollback()
# 查看更新后的结果
sql = "SELECT* FROM employee"
cursor.execute(sql)
data = cursor.fetchall()
print(data)
删除操作
# 删除数据
sql = "DELETE FROM employee WHERE age > '%d' " % (30)
try:
cursor.execute(sql)
conn.commit()
except:
print("exce[tion!")
conn.rollback()
#查看更新后的结果
sql = "select * from employee"
cursor.execute(sql)
data = cursor.fetchone()
print(data)
综合案例
保证数据库中有 test
表:
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 stu'
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()
print("数据库连接成功!")
def closeAll(self):
self.conn.close()
self.cursor.close()
print("资源释放完毕!")
def create_table_func(self):
self.cursor.execute("DROP TABLE IF EXISTS stu")
self.cursor.execute(PyMySQL.create_table)
print('数据表创建完毕')
def insert_date(self):
try:
self.cursor.execute(PyMySQL.insert)
self.conn.commit()
print("数据插入成功!")
except:
print(traceback.format_exc())
self.conn.rollback()
print("数据插入失败!")
def update_data(self):
try:
self.cursor.execute(PyMySQL.update)
self.conn.commit()
print("数据更新成功!")
except:
print(traceback.format_exc())
self.conn.rollback()
print("数据更新失败!")
def delete_data(self):
try:
self.cursor.execute(PyMySQL.delete)
self.conn.commit()
print("数据删除成功!")
except:
print(traceback.format_exc())
self.conn.rollback()
print("数据删除失败!")
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','1234','test')
my.create_table_func()
my.insert_date()
my.update_data()
my.delete_data()
my.select_data()
my.closeAll()
Connection Object
Connection
类提供以下方法:
.close()
从这一点开始,连接将不可用;如果试图对连接执行任何操作,将会引发错误(或子类)异常.commit()
将操作提交到数据库;
如果数据库支持自动提交特性,则必须首先关闭此功能;
可以提供一个接口方法将其重新打开;.cursor()
创建游标,用于执行 SQL 语句.rollback()
此方法是可选的,因为并非所有数据库都提供事务支持;
如果数据库确实提供事务,此方法将导致数据库回滚到任何挂起事务的开始;
在不首先提交更改的情况下关闭连接将导致执行隐式回滚;
Cursor Objects
游标对象具有以下常用方法
.close()
关闭游标对象,从这一点开始,游标对象将不可用;
如果试图使用游标执行任何操作,将引发错误(或子类)异常。.execute()
执行数据库操作(查询或命令等SQL语句);
返回值没有定义。.fetchone()
获取查询结果的下一行,返回单个序列,或者在没有更多数据可用时返回 None
如果execute()
的调用没有生成任何结果,或者还没有执行,则会引发错误(或子类)异常。.fetchall()
获取查询结果的所有(剩余)行,以序列的形式返回它们(例如元组列表)
如果前面对.execute()
的调用没有生成任何结果集,或者还没有发出调用,则会引发错误(或子类)异常。
还没有评论,来说两句吧...