一文详解python中的数据库操作

article/2025/11/3 2:32:27

python中的数据库操作

    • 一、数据库编程接口
      • 1. 连接对象
    • 二、使用内置的SQLite
      • 1.创建数据库文件
      • 2.操作SQLite
    • 三、MySql数据库的使用
      • 3.1 安装MySql
      • 3.2 设置环境变量
      • 3.3 启动MySql
      • 3.4 使用navicat for mysql 管理软件
      • 3.5 安装PyMysql模块
      • 3.6 连接数据库
    • 四、创建数据表
      • 4.1 创建books 图书表
      • 4.2 操作MySql数据表

最近做毕设,需要添加个数据库,记录一下。

一、数据库编程接口

重点介绍数据库API接口中的连接对象和游标对象

1. 连接对象

数据库连接对象主要提供获取数据库游标对象和提交/回滚事务的方法,以及关闭数据库连接。

使用connect函数获取对象,该函数有多个参数:

  • host 主机名
  • database/db 数据库名称
  • user 用户名
  • password 用户密码
  • charset 编码方式

使用PyMySQL模块连接MySQL数据库。

conn = pymysql.connect(host='localhost',user='user',password='passwd',db='test',charset='utf-8')

connect函数返回连接对象,该对象表示当前与数据库的会话。

连接对象支持的方法如下:

  • close() 关闭数据库连接
  • commit() 提交事务
  • rollback() 回滚事务
  • cursor() 获取游标对象,操作数据库,如执行DML操作、调用存储过程

对于这里的commit方法,commit是用于提交事务,事务主要是处理数据量大、复杂度高的数据。如果操作的是一系列动作,比如张三给李四转账:那么张三的账户余额减少,李四的账户余额增加,那么使用事务可以维护数据库的完整性,也就是保证两个操作要么全部执行,要么都不执行。

对于游标对象,代表数据库中的游标,用于指示抓取数据操作的上下文,主要是提供执行SQL语句,调用存储过程,获取查询结果等方法。

使用连接对象的cursor方法可以获取游标对象,游标对象的属性如下:

  • description属性:表示数据库列类型以及值得描述信息

  • rowcount属性:返回结果得行数统计信息,如SELECT、UPDATE、CALLPROC

  • callproc(procname[,parameters]) 调用存储过程,需要数据库支持

  • close() 关闭当前游标

  • execute(operation[,parameters]) 执行数据库操作,SQL语句或者数据库命令

在这里插入图片描述

二、使用内置的SQLite

 SQLite是一种嵌入式数据库,该数据库本身就是一个文件。SQLite将整个数据库(包括表、索引、数据本身)作为一个单独的可跨平台使用文件存储在主机中,由于SQLite本身是使用C语言开发的,而且体积小,经常被集成到各种应用程序中,Python中内置了SQLite,所以在python中使用SQLite数据库,不需要安装任何模块,直接使用。

1.创建数据库文件

在这里插入图片描述

创建SQLite数据库文件:

import sqlite3# 连接到SQLite数据库
# 数据库文件是mrsoft.db 如果文件不存在,会自动在当前目录中创建conn = sqlite3.connect('mrsoft.db')# 创建一个cursor
cursor = conn.cursor()# 使用游标对象执行SQL语句,创建user表
cursor.execute('create table user (id int(10) primary key, name varchar(20))')# 关闭游标
cursor.close()# 关闭Connection
conn.close()

在上面的代码中,使用sqlite3.connect()方法连接SQLite数据库文件mrsoft.db,由于mrsoft.db文件并不存在,所以会在本实例python代码得同级目录下创建mrsoft.db文件,该文件包含了user表的相关信息。

但是如果你再次执行上面的代码,会提示错误信息,因为user表已经存在。

2.操作SQLite

向数据表中新增数据可以使用SQL中的insert语句。

语法如下:

**insert into 表名(字段名1,字段名2,字段名3) values(字段值1,字段值2,...字段值n)**

在上面创建得user表中,有两个字段,字段名分别为id,name。而字段值需要根据字段的类型来赋值。

那执行SQL语句:

cursor.execute('insert into user(id,name) values(1,"MRSOFT")')
cursor.execute('insert into user(id,name) values(2,"Andy")')
cursor.execute('insert into user(id,name) values(3,"SiRi")')

案例1:向数据库中插入三条记录

import sqlite3# 连接到SQLite数据库
# 数据库文件是mrsoft.db 如果文件不存在,会自动在当前目录中创建conn = sqlite3.connect('mrsoft.db')# 创建一个cursor
cursor = conn.cursor()# 使用游标对象执行SQL语句,创建user表
# cursor.execute('create table user (id int(10) primary key, name varchar(20))')# 执行插入语句  引号 外单内双
cursor.execute('insert into user(id,name) values(1,"MRSOFT")')
cursor.execute('insert into user(id,name) values(2,"Andy")')
cursor.execute('insert into user(id,name) values(3,"Siri")')# 关闭游标
cursor.close()# 提交事务  使用数据库连接对象进行提交事务
conn.commit()# 关闭Connection
conn.close()

案例2:查看用户信息

查找数据表中的数据可以使用SQL中的select语句:

select 字段名1,字段名2,字段名3,  from 表名 where 查询条件

这个是查询符合条件的数据集,但是我们可能只需要某种数据,所以还需要具体的查询语句。

  • fetchone():获取查询结果集中的下一条记录
  • fetchmany(size):获取指定数量的记录
  • fetchall():获取结构集所有记录
import sqlite3
con = sqlite3.connect('mrsoft.db')  # 连接数据库# 创建一个cursor  获取游标对象
cursor = con.cursor()# 执行查询语句
cursor.execute('select * from user')# 获取查询结果  获取的是第一条记录
# fetchone 返回的是一个元组
result1 = cursor.fetchone()
print(result1)# 关闭游标
cursor.close()# 关闭连接
con.close()
import sqlite3
con = sqlite3.connect('mrsoft.db')  # 连接数据库# 创建一个cursor  获取游标对象
cursor = con.cursor()# 执行查询语句
cursor.execute('select * from user')# 获取查询结果  获取的是第一条记录
# fetchone 返回的是一个元组
# result1 = cursor.fetchone()
# print(result1)# 使用fetchmany查询多条数据
# 返回一个列表  列表中有两个元组
# result2 = cursor.fetchmany(2)
# print(result2)result3 = cursor.fetchall()  # 获取所有的数据
print(result3)# 关闭游标
cursor.close()# 关闭连接
con.close()
import sqlite3
con = sqlite3.connect('mrsoft.db')  # 连接数据库# 创建一个cursor  获取游标对象
cursor = con.cursor()# 执行查询语句  查询id > 1 所有元组
cursor.execute('select * from user where id > 1')# 获取查询结果  获取的是第一条记录
# fetchone 返回的是一个元组
# result1 = cursor.fetchone()
# print(result1)# 使用fetchmany查询多条数据
# 返回一个列表  列表中有两个元组
# result2 = cursor.fetchmany(2)
# print(result2)result3 = cursor.fetchall()  # 获取所有的数据
print(result3)# 关闭游标
cursor.close()# 关闭连接
con.close()

案例3:修改用户数据信息

语法如下:

update 表名 set 字段名 = 字段值 where 查询条件
import sqlite3# 连接数据库
con = sqlite3.connect("mrsoft.db")# 创建游标对象
cursor = con.cursor()# 执行数据库更新操作
cursor.execute('update user set name = "xiaxuefei" where id = 1')cursor.execute('select * from user')result = cursor.fetchall()
print(result)cursor.close()con.commit()  # 提交事务con.close()

案例4:删除用户信息

删除数据库表中的数据可以使用SQL中的delete语句,语法如下:

delete from 表名 where 查询条件
import sqlite3# 连接数据库
con = sqlite3.connect('mrsoft.db')# 创建一个游标对象
cursor = con.cursor()# 删除ID是1的用户
cursor.execute('delete from user where id = 1')# 获取所有的用户信息
cursor.execute('select * from user')# 记录查询结果
result = cursor.fetchall()
print(result)# 关闭游标
cursor.close()# 提交事务
con.commit()# 关闭connection
con.close()

三、MySql数据库的使用

3.1 安装MySql

在这里插入图片描述

进入选择设置类型界面。五种类型:

  • Developer Default: 安装MySql服务器以及开发MySql应用所需要的工具,工具包括开发和管理服务器的GUI平台,访问操作数据的EXCEL插件,与Visual Studio 集成开发的插件、通过NET/Java/C/C++/ODBC 等访问数据的连接器、官方示例教程、开发文档。
  • Server only: 仅安装MySql服务器,适用于部署MySql服务器
  • Client only: 仅安装客户端,适用于基于已经存在的mySql服务器进行MySql应用开发的情况
  • Full:安装MySql所有的可用组件
  • Custom:自定义所需要的组件

3.2 设置环境变量

安装完成之后,默认路径肯定是“C:\Program Files\MySQL Server 8.0\bin”。新建一个环境变量,写入路径。

在这里插入图片描述

3.3 启动MySql

在这里插入图片描述

使用以下两个命令:

net start mysql  # 启动mysql服务器mysql -u root -p # 进入MySQL服务器,需要输入密码

注意输入以上两个命令,需要管理员权限。

3.4 使用navicat for mysql 管理软件

这里我安装破解版navicat for mysql.

可以自定义安装路径:
在这里插入图片描述

然后使用PatchNavicat.exe进行破解。可以正常使用

链接:https://pan.baidu.com/s/1SeCf0BCIO1LHB5-tjPD0OQ?pwd=8x2u 
提取码:8x2u 
--来自百度网盘超级会员V2的分享

在这里插入图片描述

然后新建连接:

在这里插入图片描述

输入连接名,主机名或者IP地址填写:localhost或者127.0.0.1,输入MYsql数据库的登陆密码,这里是root

下面使用Navicat创建一个Mrsoft的数据库,右键单击mr->选择新建数据库-> 输入数据库信息。

在这里插入图片描述

3.5 安装PyMysql模块

  由于MySql服务器以独立的进程运行,并通过网络对外服务,所以需要支持Python的MySql驱动来连接到MySQl服务器,在python中支持MySql数据库的模块有很多,这里选择使用PyMySql。

安装命令如下:

pip install PyMySQL

3.6 连接数据库

import pymysql# 打开数据库连接 参数1:数据库域名或者IP;参数2:数据库账号;参数3:数据库密码  参数4:数据库名称
db = pymysql.connect(host="localhost",user="root",password="123",database="mrsoft")# 创建一个游标对象
cursor = db.cursor()# 执行SQL查询
cursor.execute("SELECT VERSION()")# 使用fetchone() 获取单条数据
data = cursor.fetchone()
print("DataBase version : %s " % data)# 关闭游标对象连接
cursor.close()# 关闭数据库连接
db.close()

上面的代码只是用来查看数据库的版本。

运行结果如下:DataBase version : 5.1.32-community

四、创建数据表

下面通过execute()创建数据库表。

4.1 创建books 图书表

books表包含id(主键)、name(图书的名称)、category(图书分类)、price(图书价格)和publish_time(出版时间)共五个字段。

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)
)ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8

创建数据库表之前,先测试是否已经存在这个表:

drop table if exists books

表示如果mrsoft数据库已经存在表books,那么先删除books,然后在创建books数据表。具体代码如下:

import pymysql
# 打开数据库
db = pymysql.connect(host='localhost',user='root',password='123',database='mrsoft')# 使用cursor() 方法执行SQL,如果表存在则删除
cursor = db.cursor()# 使用execute 执行SQL,如果表存在 就删除表
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)
)ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
"""# 执行SQL语句
cursor.execute(sql)
db.close()

在这里插入图片描述

4.2 操作MySql数据表

 MySQL数据表的操作主要是CRUD。

案例:批量添加图书数据:

插入数据,可以使用execute()添加一条记录,也可以使用executemany()方法批量添加多条记录,executemany()语法如下:

executemany(operation,seq_of_params)

operation:操作的SQL语句
seq_of_params:参数序列

使用executemany() 批量添加多条记录。

import pymysql
# 打开数据库
db = pymysql.connect(host='localhost',user='root',password='123',database='mrsoft')# 使用cursor() 方法执行SQL,如果表存在则删除
cursor = db.cursor()data = [("零基础学习python",'python','1',"2018-09-10"),("零基础学习java",'java','11',"2018-09-11")]try:# 执行sql语句 插入多条数据  第二个参数是 要插入的数据cursor.executemany("insert into books(name,category,price,publish_time) values(%s,%s,%s,%s)",data)# 提交事务db.commit()except:# 发生错误时,回滚db.rollback()db.close()
  • connect()方法连接数据库,额外设置字符集charset=utf8,可以防止插入中文时出现乱码。
  • 在使用Insert语句插入数据时,使用%s作为占位符,可以防止SQL注入。

在这里插入图片描述


http://chatgpt.dhexx.cn/article/YIgYeFxO.shtml

相关文章

数据库操作练习题

如何查看员工表中的所有字段? 如何查看员工表中的姓名和性别? 如何知道每个员工一年的总收入? 怎么查看女员工的信息? 如何查看月薪范围位于 8000 到 12000 之间的员工? 查询员工中叫做“张三”、“李四” 或“张飞”的…

MySQL(一)数据库操作

1.关系型数据库与非关系型数据库区别与联系 1.关系型数据库 ( SQL ) MySQL , Oracle , SQL Server , SQLite , DB2 , … 关系型数据库通过外键关联来建立表与表之间的关系 2.非关系型数据库 ( NOSQL ) Redis , MongoDB , … 非关系型数据库通常指数据以对象的形式存储在数据…

使用ORACLE 进行数据库操作

上一期讲了 如何创建表,例如我们创建了一个 名为 t_customer 的表,格式为下: create table t_customer(cust_id int primary key,cust_name varchar(20),cust_gender char(3),cust_age int,cust_birthday date,cust_height number(3,2),cust…

C#数据库操作

功能需求 1,利用随机数模拟产生每次考试成绩 2,将每次考试成绩存入到数据库 3,将每次考试成绩划分优、良、中、差、不及格五类,并作为查询条件,查询符合每种水平的成绩 技术知识点 1.random类的使用 2.数据库的链…

云数据库操作

1 云数据库创建 每一个list就相当于一个表,每个记录就是一条内容 云数据库存储形式是JSON2 读取云数据库值 数据库初始化 const db wx.cloud.database() 连接数据库 db.collection(需要连接的数据列表名)可以通过.doc(‘具体id号’)获取具体的信息内容获取年、月…

Android数据库操作

Android内置了一个名为SQLite的关系型数据库,这是一款轻量型的数据库,操作十分简便。SQLite与别的数据库不同的是,它没有数据类型。可以保存任何类型的数据到你所想要保存的任何表的任何列中。但它又支持常见的类型比如: NULL, VARCHAR, TEXT…

数据库基本操作

一、数据库基本操作 1.数据库的基本操作 -- 1.数据库的基本操作 使用test数据库 USE test; -- 查看当前test数据库中所有表 MySQL命令 SHOW TABLES; -- 查表的基本信息 SHOW CREATE TABLE student; -- -- 查看表的字段信息 desc student; 2.数据表的基本操作 -- 2.数据表的…

数据库基础操作

一、数据库的操作 数据库与客户端是通过网络进行交互的。 1、显示当前数据库 sql语句必须以 ; 结尾 show databases; 2、创建数据库 create database 数据库名; ->如果数据库sql敲错了,会有提示。 ->如果sql敲错了,可以按 ctrlc来终止sql。…

数据库的基本操作

目录 一、数据库的基本操作 1、数据库的登录及退出 2、查看所有数据库 3、显示数据库版本 4、显示时间 5、创建数据库 6、查看创建数据库的语句 7、查看当前使用的数据库 8、查看当前用户 9、使用某个数据库 10、删除数据库 二、数据表的基本操作 1、查看当前数据…

如何在IDEA上创建一个JSP项目【亲测有效】

idea上创建一个jsp项目 1、创建一个Java项目 2、创建成功后右击项目名称,点击Add Framework support 3、选择web application 选择适合版本,创建 4、创建成功后项目中会出现web文件夹 5、点击属性,进行配置 6、在project中配置jdk(你自己电脑…

Eclipse中安装配置Tomcat和创建JSP项目

这里写自定义目录标题 安装配置Tomcat创建JSP项目 安装配置Tomcat 下载并解压Tomcat到指定目录Eclipse菜单栏中找到Window–>Preperences->Server->Runtime Environments->Add 3.选择Tomcat文件夹 4.在Eclipse中找到Servers视图窗口,创建Tomcat服务…

springBoot+JSP搭建项目

1.springBoot对JSP的支持 springBoot虽然支持JSP,但是官方不建议使用,下面是官方文档解释 When running a Spring Boot application that uses an embedded servlet container (and is packaged as an executable archive), there are some limitations…

IntelliJ IDEA中创建jsp项目

创建java项目 首先需要创建一个普通的java项目 这一步很简单就不用多说了,按照正常操作来就行了 创建好的目录结果如下 创建Moudle 在IDEA中jsp项目是Project中的一个Moudle,因此我们就需要在jsp中创建一个moudle 然后Next 输入moudle名称 finishe…

IntelliJ IDEA 2021.1.2 x64版的 IDEA 创建 jsp项目

在创建jsp项目前需要 搭建JSP开发环境(配置Tomcat服务器):https://blog.csdn.net/qq_51444577/article/details/118409179 1、 创建jsp项目 先创建一个项目 创建一个java项目 一直按next键,给项目取个名如 jsp03,按…

使用eclipse创建的第一个jsp项目

1.创建web项目 首先打开eclipse->file->new->Dymanic Web Project(如果没有这个选项,选other,打开搜索web) 点finish,web项目创建成功 2.创建jsp 进行第一个jsp页面的编写。右键选择目录下面的WebRoot文件夹,然后new…

Java EE之idea创建和运行jsp项目

1.点击打开Inteliij点击Create New Project 2.点击java,再左侧Project SDK选择安装的jdk路径,勾选WebApplication和Create web.xml。点击next 4.再新弹出的窗口中,Project name中填写项目名称这里写的是Web0903,对应的Project location也会创建一个Web…

JSP项目引入Vue.js进行项目开发(工程搭建)

Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面&#xff0…

eclipse创建第一个JSP项目

前言 ​ 本文的内容由四个部分组成,分别为①Tomcat的安装与配置,②创建第一个JSP项目,③打包JSP项目到Tomcat服务器上并在浏览器中运行,④eclipse的一些java Web的一些设置。 1、Tomcat安装与配置 ​ 到Tomcat官网下载Tomcat相…

Idea中新建Servlet+JSP项目

文章目录 前言一、Servlet 是什么?二、JSP 是什么?三、怎么在 IDEA 中新建 Servlet 项目?1. 新建项目2. 选择 Java Enterprise3. 选择 规范 Servlet步骤4. 删除不用的 pom.xml步骤5. 编辑运行配置,设置 JRE 总结 前言 随着学习 Ja…

jsp项目如何引入vue

如题,背景就不介绍了,项目是前后端不分离的,这让我一个转行前端对JSP语法不熟的人来说写起来着实难受。后来加了个考试的新功能,果断引入vue和element,还有polyfill.js,因为要兼容IE9。刚开始写的时候vue和…