作者主页:编程指南针
作者简介:Java、前端、Python开发多年,做过高程,项目经理,架构师
主要内容:Java项目开发、毕业设计开发、面试技术整理、最新技术分享
收藏点赞不迷路 关注作者有好处
文末获得源码
数据库作为存储系统数据的主要工具,担负着数据持久化存储的重任,本次主要讲解如何使用Python连接操作SQLite和MYSQL数据库。本部分需要具有一定的数据库基本知识,比如数据库的DML\DDL语句操作等,不再讲述数据库相关知识。
数据库连接对象主要提供获取数据库游标对象和提交/回滚事务的方法,以及如何关闭数据库连接。
python中使用connect()函数来获得数据库连接对象。
语法:
connect(server=None,user=None,password=None,database=None,charset=None)
连接示例:
import pymysql
con = pymysql.connect(host='localhost',
user='user',
password='passwd',
db='test',
charset='utf8',
cursorclass=pymysql.cursors.DictCursor)
connect()函数返回连接对象,它提供了一些方法用于操作事务和游标:
close():关闭数据库连接
commit():提交事务
rollback():回滚事务
cursor():获取游标对象,操作数据库,执行DML操作,调用存储过程等
游标对象(Cursor Object)代表数据库中的游标,用于指示抓取数据操作的上下文,主要提供执行SQL语句、调用存储过程、获取查询结果等方法。
通过cursor()方法来获得游标对象。游标对象有以下两个常用的属性:
* description:数据库列类型和值的描述信息
* rowcount: 返回结果的行数统计信息,如SELECT,UPDATE,CALLPROC等
常用方法如下图所示:
SQLite数据库是一种嵌入式数据库,它的数据库就一个文件。它本身是使用C语言编写的,体积小,所以经常被集成到各种应用程序中,Python就内置了SQLite3,所以在Python中使用SQLite,不需要安装任何模块,直接使用。
1.3.1 创建数据库文件
数据库操作的基本流程图如下图所示。
示例:
#操作SQLite数据库
import sqlite3
conn = sqlite3.connect("mysoft.db") #如果不存会自动创建mysoft.db
cursor = conn.cursor()
cursor.execute("create table user(id int(10) primary key,name varchar(20))")
#关闭游标
cursor.close()
#关闭connection
conn.close()
IDEA中集成的有SQLite插件,可以直接双击打开创建的SQLite数据库。具体如下图所示:
1.3.2 数据操作
1.新增用户数据:
#操作SQLite数据库
import sqlite3
conn = sqlite3.connect("mysoft.db") #如果不存会自动创建mysoft.db
cursor = conn.cursor()
cursor.execute("insert into user(id,name) values('1','znz')")
cursor.execute("insert into user(id,name) values('2','znz001')")
cursor.execute("insert into user(id,name) values('3','znz002')")
conn.commit() #提交事务后数据才会进入数据库中
#关闭游标
cursor.close()
#关闭connection
conn.close()
可在IDEA中的右侧显示SQLite处user表右键选择Run SQL Script来执行SQL查询:
select * from user
2.查询用户数据
提供的三种常方式来进行数据查询:
* fetchone(): 获得查询结果集中的下一条记录
* fetchmany(size): 获取指定数量的记录
* fetchall(): 获取结构集的所有记录
示例:
#操作SQLite 数据查询
import sqlite3
conn = sqlite3.connect("mysoft.db") #如果不存会自动创建mysoft.db
cursor = conn.cursor()
cursor.execute("select * from user")
result = cursor.fetchone() #取第一条数据后,指针停留在第二条
print(result)
result1 = cursor.fetchmany(2) #取出剩下的两条
print(result1)
result2 = cursor.fetchall() #再取就没有了
print(result2)
输出结果:
(1, 'znz')
[(2, 'znz001'), (3, 'znz002')]
[]
示例:
#操作SQLite 数据查询
import sqlite3
conn = sqlite3.connect("mysoft.db") #如果不存会自动创建mysoft.db
cursor = conn.cursor()
cursor.execute("select * from user")
result2 = cursor.fetchall()
print(result2)
conn.commit()
#关闭游标
cursor.close()
#关闭connection
conn.close()
输出结果:
[(1, 'znz'), (2, 'znz001'), (3, 'znz002')]
占位符传参:可以通过?来表示一个参数的占位,实现运行时动态传参
#操作SQLite 数据查询
import sqlite3
conn = sqlite3.connect("mysoft.db") #如果不存会自动创建mysoft.db
cursor = conn.cursor()
cursor.execute("select * from user where id>?",(1,))
result2 = cursor.fetchall()
print(result2)
conn.commit()
#关闭游标
cursor.close()
#关闭connection
conn.close()
输出结果:
[(2, 'znz001'), (3, 'znz002')]
3.修改用户的数据
示例:
#操作SQLite 数据修改
import sqlite3
conn = sqlite3.connect("mysoft.db") #如果不存会自动创建mysoft.db
cursor = conn.cursor()
cursor.execute("update user set name=? where id=?",('fxp',1,))
conn.commit()
cursor.execute("select * from user")
result = cursor.fetchall()
print(result)
#关闭游标
cursor.close()
#关闭connection
conn.close()
4.删除用户数据
示例:
#操作SQLite 数据修改
import sqlite3
conn = sqlite3.connect("mysoft.db") #如果不存会自动创建mysoft.db
cursor = conn.cursor()
cursor.execute("delete from user where id=?",(1,))
conn.commit()
cursor.execute("select * from user")
result = cursor.fetchall()
print(result)
#关闭游标
cursor.close()
#关闭connection
conn.close()
本次使用MYSQL5.7版本数据库,安装参考演示视频:https://live.csdn.net/v/282244
python操作MYSQL数据库,需要支持Python的MySQL驱动来连接到MySQL服务器,我们常用PyMySQL模块来操作MYSQL数据库。需在线安装PyMySQL模块:
pip install PyMySQL
我们通过MYSQL的客户端工具Navicat来连接MYSQL服务器后,可以创建一个名为studentPython的数据库。
然后 就可以编写代码连接MYSQL进行相应操作了。
示例:
#操作MYSQL数据库
import pymysql
#此处传参最好是使用关键字参数,不同版本的connect传的不太一样
conn = pymysql.connect(host="localhost",user="root",password="root",db="studentPython")
cursor = conn.cursor()
cursor.execute("select version()")
result = cursor.fetchone()
print("database version:%s" % result)
#关闭游标
cursor.close()
#关闭connection
conn.close()
1.创建数据表
在数据库操作中,创建表,删除表这都属于DDL语句,也就是数据结构定义语句。
示例:
#操作MYSQL数据库 创建表
import pymysql
conn = pymysql.connect(host="localhost",user="root",password="root",db="studentPython")
cursor = conn.cursor()
cursor.execute("DROP TABLE IF EXISTS books")
#使用预处理语句创建表
sql="""
create table books(
id int(8) NOT NULL AUTO_INCREMENT,
name varchar(50) NOT NULL,
category varchar(50) NOT NULL,
price decimal (10,2) DEFAULT NULL,
publish_time date DEFAULT NULL,
primary key(id)
)
"""
#执行SQL语句
cursor.execute(sql)
#关闭游标
cursor.close()
#关闭connection
conn.close()
2.操作MYSQL表
对表的增删改查操作和SQLite一样,下面举例演示使用 executemany()方法批量插入数据。
示例:
#操作MYSQL数据库 操作表
import pymysql
conn = pymysql.connect(host="localhost",user="root",password="root",db="studentPython")
cursor = conn.cursor()
#数据列表
data =[
("零基础学Python","python",'79.80','2018-5-28'),
("Python从入门到精通","python",'69.80','2018-5-28'),
("零基础学PHP","php",'79.80','2018-5-28'),
("零基础学Java","java",'59.80','2018-5-28'),
]
try:
cursor.executemany("insert into books(name,category,price,publish_time) values(%s,%s,%s,%s)",data)
#提交数据
conn.commit()
except:
#发生错误时回滚
conn.rollback()
#关闭游标
cursor.close()
#关闭connection
conn.close()