Python与数据库
目录
一、数据库
1、数据库的概念
2、数据库的表
3、字段详解
二、SQL数据库语句
1、了解SQL命令
2、CREATE命令
3、INSERT命令
三、数据库和SQL命令
四、数据库的查询与修改
1、SELECT命令
2、UPDATE命令
3、DELETE命令
4、DROP TABLE
5、SQL的注意事项
五、处理二进制字段
在Python中,我们通常会用列表,字典,元组等数据类型来存储一些数据,但是当我们有大量的数据时,使用这些数据类型会比较麻烦,比如要进行写入,修改,查找等操作时,我们要进行大量的数据编辑,这时我们可以把Python结合数据库来使用,下面我们会介绍其内容。
一、数据库
1、数据库的概念
数据库可以用来存放大量的数据,并且提供了方便且快速的检索手段,且能够快速查找出符合某种条件的数据(比如所有身高在170cm以上的男生)
数据库可以是一个文件比如“c:/tmp/students.db”
2、数据库的表
一个数据库文件中,可以包含很多张表,比如在students.db的数据库文件中,包含学生信息表和学生课程表
而一个表由记录构成,比如在一个学生信息的表中,每一个记录,就代表一个学生的信息
而一个记录由字段构成,每个字段对应一个属性,一个记录中若包含多个字段,就是在表述这个事物的多个属性,比如拿出一个学生记录,可以由name(姓名),id(学号),age(年龄),gender(性别)等字段构成
3、字段详解
每一个字段都是有“类型”的,下面我们用一个学生信息表的例子来介绍一下:
字段名 | 数据类型 |
name(姓名) | text(字符串) |
gpa(成绩) | real(小数) |
age(年龄) | integer(整数) |
profile(用户资料) | text(字符串) |
photo(照片) | blob(二进制数据) |
birthday(生日) | date(日期,本质上就是text) |
register time(注册时间) | datetime(日期+时间,本质上就是text) |
二、SQL数据库语句
1、了解SQL命令
SQL命令是用来对数据库进行操作的标准语句,它支持多种数据库的操作
下面我们介绍几种常见的SQL命令(不区分大小写)
SQL命令 | 功能 |
CREATE TABLE | 创建一个表 |
INSERT INTO | 在表中插入记录 |
UPDATE | 在表中更新记录 |
SELECT | 在表中查询记录 |
DALETE | 从表中删除记录 |
2、CREATE命令
我们可以用CREATE命令来创建一个表:
例子:
CREATE TABLE if not exists students (id integer primary key , name text , gpa real , birthday date , age integer , picture blob)
这个命令会创建一个名为students的表,里面会包含许多种字段(绿色的字),而后面跟着的黑色的字就是其对应的数据类型,而第一个id后面的(primary key)表示不可重复
3、INSERT命令
我们可以用INSERT INTO 命令来插入一个记录
例子:
INSERT INTO students VALUES(001 , 'Sue' , 100 , '1900-01-01' , 19 , null)
这条命令在students表中插入了一个记录,该记录暂无照片,就用“null”表示
而VALUES是指该记录中每个字段的值是什么
三、数据库和SQL命令
下面我们把数据库和Python结合:
在结合的时候我们需要导入一个sqlite3的包:
我们来看一个简单的例子:
先在某目录下创建一个后缀是.db的数据库文件(也可以不创建,但是要在Python的代码中明确之处想要创建的文件的目录及名称)
创建完成后我们在Python的文件中创建对数据库执行操作的代码:
import sqlite3db = sqlite3.connect("D:\学习\Python\students.db") #连接数据库,若不存在则自动创建
cur = db.cursor() #获取光标,操作数据库一般需要通过光标来进行
sql = "CREATE TABLE if not exists students (id integer primary key , name text , gpa real , birthday date , age integer )" #创建一个students的表。如果不存在就创建它
cur.execute(sql) #通过光标来执行上面的SQL命令
cur.execute("INSERT INTO students VALUES(1001 , 'Sue' , 100 , '1900-01-01' , 19 , 1 )") #插入一个记录
mylist = [(1002 , 'Lua' , 98 , '1900-01-02' , 99.5 , 1) , (1003 , 'Don' , 88.5 , '1999-02-18' , 67 , 1)]for i in mylist : #可把列表中的每个元素都遍历一遍,然后把这些数据依次插入到students表中cur.execute('INSERT INTO students VALUES(?,?,?,?,?,?)' , (i[0] , i[1] , i[2] , i[3] , i[4] , i[5])) #“ ?”对应这后面的每一项i[x],证明是可变变量db.commit() #执行这条语句,才能真正的把上面那些操作完成
cur.close() #关闭光标
db.close() #关闭数据库
执行后,我们可以用SQLite软件来查看:
可以发现我们的成功的创建了students这个表,并且插入了相关的记录
四、数据库的查询与修改
1、SELECT命令
SELECT命令是一个十分强大的命令,它可以根据你的要求去筛选记录:
下面是一些例子:
①:SELECT * FROM students
检索表students表中的全部记录
( * 代表查询所要求的记录的全部字段 )
②:SELECT * FROM students ORDER BY age
检索表students表中的全部记录,并按年龄排序
③:SELECT name , age FROM students
检索表students表中的全部记录,但每个记录只取name和age字段
④:SELECT * FROM students WHERE name = " Sue "
检索表中全部name字段为“Sue”的记录
(WHERE 代表检索条件)
⑤:SELECT * FROM students WHERE name = "Sue" AND age > 20 ORDER BY age DESC
检索表中name字段是“Sue”,且年龄大于20的人,并且结果按年龄的降序排序
下面我们根据上面已经创建好的数据库文件,来进行一个筛选:
import sqlite3db = sqlite3.connect("D:\学习\Python\students.db") #连接数据库
cur = db.cursor() #创建光标
sql = 'SELECT * FROM students WHERE age < 50' #要执行的SQL语句
cur.execute(sql) #执行SQL语句
x = cur.fetchall() #获取SQL语句操作后,得到的结果
if x != [] :print("符合条件的共有:" , len(x))for i in x :print(i)cur.close() #关闭光标
db.close() #关闭数据库
我们想要筛选数据库中年龄小于50的记录
输出:
2、UPDATE命令
①UPDATE students SET age = 18
把所有记录的age都改成18
②UPDATE students SET , gpa = 88 , age = 99 WHERE name = "Don"
修改name = Don 的gpa字段和age字段
例子:
import sqlite3db = sqlite3.connect("D:\学习\Python\students.db") #连接数据库
cur = db.cursor() #创建光标
sql = 'UPDATE students SET age = ? WHERE name = ?' #要执行的SQL语句
cur.execute(sql , (1, "Don")) #执行SQL语句,元组中的两个元素对应上面的两个?(若Don不存在,则无效果)
db.commit() #只要改变了数据库的数据就必须执行这个!!!
cur.close() #关闭光标
db.close() #关闭数据库
我们回到数据库的表中,发现Don的年龄被改成了1(神秘返老还童术):
3、DELETE命令
①DELETE FROM students WHERE age <18
删除年龄小于18的记录
②DELETE FROM students
删除全部记录
4、DROP TABLE
DROP TABLE IF EXISTS students
删除students表
(这个操作最后也需要commit)
5、SQL的注意事项
对于修改表的操作:如插入,删除,更新,在关闭数据库前不要忘记commit!否则可能无效
五、处理二进制字段
把图片放入数据库
import sqlite3
import requests #网络请求db = sqlite3.connect("D:\学习\Python\students.db")
cur = db.cursor()imgURL = "https://img5.duitang.com/uploads/item/201605/19/20160519224441_VFMWR.jpeg"
imgStream = requests.get(imgURL, stream = True) #stream=True 参数告诉 requests 库以流式传输(streaming)的方式获取数据,而不是一次性将所有内容下载到内存中
sql = "UPDATE students SET picture = ? WHERE name = 'Don'"
cur.execute(sql , (imgStream.content , )) #注意元组最后需要有一个逗号db.commit()
cur.close()
db.close()
补充:
f = open (r"D:\学习\Python\001.jpg" , "rb") #字符串之前的r是把字符串内的任何特殊字符数字均看成字符,后面的rb的r是读取,b是二进制
以上就是Python与数据库的全部内容:)
相关文章:
Python与数据库
目录 一、数据库 1、数据库的概念 2、数据库的表 3、字段详解 二、SQL数据库语句 1、了解SQL命令 2、CREATE命令 3、INSERT命令 三、数据库和SQL命令 四、数据库的查询与修改 1、SELECT命令 2、UPDATE命令 3、DELETE命令 4、DROP TABLE 5、SQL的注意事项 五、处…...
MyBatis中mapper.xml 的sql映射规则
一、SQL 映射文件核心元素 MyBatis 映射文件的顶级元素(按定义顺序): cache:命名空间的缓存配置。cache-ref:引用其他命名空间的缓存。resultMap:自定义结果集映射。sql:可重用的 SQL 片段。i…...
ubuntu22.04安装搜狗输入法保姆教程~
一、添加中文语言支持 1.首先打开设置,找到Language and Region 2.点击Manage Installed Languages 3.点击 Install/Remove Languages... 4.选中Chinese (simplified),点击Apply...
Jenkins 配置python项目和allure
Jenkins新建项目 新建ry-api-auto-test。 添加项目描述,选择gitee令牌。 源码管理,设置仓库地址和凭证。参考我上一篇文章的链接:配置gitee私人令牌和凭证 构建步骤,因为我Jenkins部署在Windows,因此选择batch。…...
keda基于postgresql伸缩dify-api服务
1 概述 dify-api使用postgresql来存储数据,在dify控制台每新建一个聊天机器的聊天框,就会在conversations表里新插入一条记录,并且不断地更新字段updated_at,示例如下: dify# select * from conversations limit 1; …...
蓝桥杯 拼正方形
问题描述 小蓝正在玩拼图游戏。他有: 7385137888721 个 22 的方块10470245 个 11 的方块 他需要从中挑出一些方块来拼出一个正方形。 例如: 用 3 个 22 和 4 个 11 方块可以拼出一个 44 的正方形;用 9 个 22 方块可以拼出一个 66 的正方…...
failed to load steamui.dll”错误:Steam用户的高频崩溃问题解析
当你满心欢喜地双击 Steam 图标,准备进入游戏世界时,屏幕上突然弹出 “failed to load steamui.dll” 的刺眼提示——这是全球数百万 Steam 用户最不愿见到的错误之一。作为 Steam 客户端的核心界面动态链接库文件,steamui.dll 的缺失或损坏会…...
Django之旅:第六节--mysql数据库操作增删改查(二)
前提条件(models.py已经设置好): from django.db import mmodelsclass UserInfo(models.Model):namemodels.CharFIeld(max_length32)passwordmodels.CharFIeld(max_length64)#agemodels.IntegerFIeld()操作数据语法(在views.py文件࿰…...
6. 使用VUE实现前端页面的分级嵌套
1. 说明 在UI设计中,页面中有些部分的占用空间位置是固定不动,有些部分的区域是根据情况进行动态切换的。比如,一个网页的菜单栏和主题内容展示,往往菜单栏区域的导航按钮占用的空间是固定不动的,当用户点击不同按钮时…...
(UI自动化测试web端)第三篇:元素的常用操作方法_浏览器操作
模拟浏览器的常见操作。 1、最大化浏览器窗口 driver.maximize_window()2、浏览器后退、前进、刷新、关闭、退出 # 调用浏览器的后退 driver.back() # 调用浏览器的前进 driver.forward() # 刷新页面 driver.refresh() # 关闭当前窗口 driver.close() # 退出浏览器 driver.q…...
Ubuntu软件包离线下载安装
1、下载软件包tcpd,并在/var/cache/apt/archives目录中查看。 rooteducoder:~# apt-get install -d tcpd Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed:tcpd …...
第十节 MATLAB逻辑运算
MATLAB逻辑运算都是针对元素的操作,运算结果是特殊的逻辑数组;在逻辑分析时,逻辑(真)用1表示,逻辑假用0表示,逻辑运算中所有的非零元素作为1处理。 注意: 使用MATLAB逻辑运算时的语…...
初识哈希表
一、题意 给定一个整数数组 nums 和一个目标值 target,要求你在数组中找出和为目标值的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 示例: 给定 nums [2, 7, …...
Ajax与Axios,以及Apifox的入门使用
Ajax与Axios,以及Apifox的入门使用 作者:blue 时间:2025.3.20 文章目录 Ajax与Axios,以及Apifox的入门使用1.Ajax2.Axios3.Apifox的基本使用内容Path 参数定义语法用途 Query 参数定义语法用途 1.Ajax 概念:Asynchr…...
jmm-java内存模型
java内存模型----底层原理 底层原理 从Java代码到最终执行的CPU指令的流程: 最开始,我们编写的Java代码,是*.java文件在编译(javac命令)后,从刚才的*.java文件会变出一个新的Java字节码文件(…...
机器学习——KNN数据均一化
在KNN(K-近邻)算法中,数据均一化(归一化)是预处理的关键步骤,用于消除不同特征量纲差异对距离计算的影响。以下是两种常用的归一化操作及其核心要点: 质押 一 、主要思想 1. 最值归一化&#…...
页面元素内容太长,给元素添加title
一、需求 页面元素内容太长,给元素添加title 二、实现 1、直接使用title属性 <div target"_blank" class"text-overflow" title"叉车司机">叉车司机</div> 2、使用tdesign的Popup 弹出层 <t-popup>触发元素&…...
【Git多分支使用教程】
Git多分支使用教程 Git多分支使用手册目录多分支只拉取一个多分支拉取指定几个步骤 1:克隆第一个分支步骤 2:获取其他分支 常见问题与解决方法1. 错误:origin/分支名 is not a commit2. 分支名称冲突3. --single-branch 限制 总结 Git多分支使…...
【408--复习笔记】数据结构
【408--复习笔记】数据结构 1.绪论数据结构基本概念• 请简述数据结构的定义。• 数据结构中数据、数据元素、数据项、数据对象的区别是什么? 算法相关• 什么是算法?算法的五个重要特性是什么?• 如何理解算法的时间复杂度和空间复杂度&…...
使用 Vite 提升前端开发体验:入门与配置指南
在现代前端开发中,构建工具的选择对开发效率和项目性能有着至关重要的影响。Vite 是一个新兴的前端构建工具,由 Vue.js 的作者尤雨溪开发,旨在通过利用现代浏览器的原生 ES 模块特性,提供更快的开发服务器启动速度和更高效的热更新…...
WPS JS宏编程教程(从基础到进阶)--第二部分:WPS对象模型与核心操作
第二部分:WPS对象模型与核心操作 WPS对象的属性、方法、集合 工作簿对象常用表达方式工作表对象常用表达方式单元格对象常用表达方式 单元格操作实战 单元格复制与重定位单元格偏移与尺寸调整 颜色设置专题 索引颜色与RGB颜色按条件动态设置单元格颜色 第二部分&…...
瑞数信息《BOTS自动化威胁报告》正式发布
在数字化时代,BOTS自动化攻击如同一场无声的风暴,正以前所未有的态势席卷全球网络空间。为了让各行业更好地应对自动化威胁挑战,瑞数信息作为BOTS自动化攻击防护领域的专业厂商,多年来持续输出BOTS自动化威胁报告,为各…...
【NUUO 摄像头】(弱口令登录漏洞)
漏洞简介:NUUO 是NUUO公司的一款小型网络硬盘录像机设备。 NUUO NVRMini2 3.0.8及之前版本中存在后门调试文件。远程攻击者可通过向后门文件handle_site_config.php发送特定的请求利用该漏洞执行任意命令。 1.Fofa搜索语句: 在Fofa网站,搜索&…...
Android系统的安全问题 - Linux的能力模型(Capability)和 SELinux 的区别
Linux 的能力模型(Capabilities)和 SELinux 是两种不同的安全机制,虽然它们都用于增强 Linux 系统的安全性,但它们的实现方式和目标有所不同。 1. Linux Capabilities(能力模型) 作用:传统的 …...
Rust安装并配置配置vscode编译器
一. 下载rustup-init.exe rust下载网址:Getting started - Rust Programming Language 根据系统,选择适合的exe文件 我选择的的是右边64bit的 打开下载的文件 输入1,回车 二. Visual C 安装 自动下载安装vs 等待安装完毕 三. Rust 安装…...
Spring Boot响应压缩配置与优化
一、核心工作机制 1.1 自动协商触发条件 Spring Boot的响应压缩功能基于智能协商机制,需同时满足以下条件方可触发: 客户端支持:请求头包含Accept-Encoding: gzip/deflate数据量阈值:响应体大小超过预设值(默认2KB&…...
el-select开启filterable模式,限制输入框输入类型
遇到el-select开启filterable模式查询,下拉框内容是文字与数字组合版,导致校验不准,且没有属性能直接限制focus输入的内容,这时候可以用自定义属性来解决 实例:(以只能输入数字为例) <el-for…...
创建login.api.js步骤和方法
依次创建 login.api.js、home.api.js...... login.api.js、home.api.js 差不多 导入到 main.js main.js 项目中使用...
在线运行vscode
安装 https://github.com/coder/code-server?utm_sourcesyndication&pubDate20250317 运行前预览脚本 curl -fsSL https://code-server.dev/install.sh | sh -s -- --dry-run运行脚本 curl -fsSL https://code-server.dev/install.sh | sh其他 可以通过后台服务运行&am…...
【Nginx】可以做哪些优化?
一、配置文件优化 1.1 性能优化 开启网页压缩 gzip on;设置网页缓存时间expires 缓存时间;设置连接保持超时keepalive_timeout 服务端超时时间 客户端超时时间;设置连接保持最大请求数keepalive_requests设置工作进程数 worker_processes 与服务器CPU数量…...
springboot在feign和线程池中使用TraceId日志链路追踪(最终版)-2
文章目录 简述问题feign调用时给head加入traceIdFeignConfig配置FeignConfig 局部生效feign拦截器和配置合并为一个文件(最终版)feign异步调用拦截器配置[不常用] 使用TTL自定义线程池为什么需要TransmittableThreadLocal? 总结参考和拓展阅读…...
datawhale组队学习-大语言模型-task5:主流模型架构及新型架构
目录 5.3 主流架构 5.3.1 编码器-解码器架构 5.3.2 因果解码器架构 5.3.3 前缀解码器架构 5.4 长上下文模型 5.4.1 扩展位置编码 5.4.2 调整上下文窗口 5.4.3 长文本数据 5.5 新型模型架构 5.5.1 参数化状态空间模型 5.5.2 状态空间模型变种 5.3 主流架构 在预训…...
《Matplotlib三维可视化工业实践——从分子模拟到流体力学》
目录 编辑 一、工业三维可视化挑战 1.1 典型工业场景需求 1.2 技术痛点分析 二、Matplotlib三维可视化基础 2.1 三维坐标体系构建 2.2 核心三维绘图API 三、分子模拟可视化实战 3.1 晶体结构渲染 3.2 分子轨迹动态演示 四、流体力学场数据优化渲染 4.1 矢量场高效…...
【neo4j数据导出并在其他电脑导入】
停止服务 neo4j stop 导出 neo4j-admin database dump neo4j --to-path"C:\Users\12901\Downloads\test folder" 导入 将 .dump 文件放在一个目录中 mkdir /root/dump-directory mv /root/neo4j.dump /root/dump-directory/ 使用包含 .dump 文件的目录路径作为 …...
多智能体融合(Multi-Agent Fusion)
多智能体融合(Multi-Agent Fusion)是指在多智能体系统(MAS, Multi-Agent System)中,多个智能体(Agent)通过协作、竞争或共享信息,实现全局最优的智能决策和任务执行。该方法广泛应用…...
状态模式(State Pattern)
状态模式(State Pattern) 如果任务的执行过程是有多个不同状态的(比如初始化、运行中、完成等),你可以使用状态模式。每个状态可以有不同的行为,使得任务的状态管理更加清晰和可维护。 示例: …...
Linux网站搭建(新手必看)
1.宝塔Linux面板的功能 宝塔面板是一款服务器管理软件,可以帮助用户建立网站,一键配置服务器环境,使得用户通过web界面就可以轻松的管理安装所用的服务器软件。 2. 宝塔Linux面板的安装 宝塔官网地址:宝塔面板 - 简单好用的Linu…...
JavaEE进阶---Mybatis(预编译SQL即时SQL动态SQL标签池化技术说明)
文章目录 1.经典面试题(#{}和${}的区别)1.1关于#1.2关于$1.3情况下需要使用$ 2.数据库连接池2.1池化技术图解 3.动态SQL3.1if标签的使用3.2where标签的使用3.3set标签的使用 1.经典面试题(#{}和${}的区别) 1.1关于# 预编译SQL&a…...
Object.defineProperty()Proxy详解(Vue23数据劫持实现)
底层原理👇🏿 总结一下,结构应该包括: 1. 方法的基本作用和参数。 2. 数据描述符和存取描述符的区别。 3. 属性定义的内部处理流程。 4. 在Vue中的应用实例。 5. 常见错误和正确实践。 每个部分都要结合搜索结果的信息&…...
网页的性能优化
面试中如何回答"前端性能优化"问题 在面试中回答性能优化问题时,建议采用结构化表达方式,展示你的系统化思维和实战经验。以下是一个推荐的回答框架: 1. 开场概述 “前端性能优化是一个系统工程,我通常会从加载性能、…...
Vue 3中的Teleport:超越组件边界的渲染
Vue 3引入了许多新特性,其中之一便是Teleport。它为开发者提供了一种强有力的方式来控制组件的渲染位置,使得我们可以将组件的内容“传送”到DOM树的任何地方,而不仅仅局限于其父级组件的边界内。这在创建模态框、通知系统或任何需要脱离当前…...
JVM垃圾回收笔记01-垃圾回收算法
文章目录 前言1. 如何判断对象可以回收1.1 引用计数法1.2 可达性分析算法查看根对象哪些对象可以作为 GC Root ?对象可以被回收,就代表一定会被回收吗? 1.3 引用类型1.强引用(StrongReference)2.软引用(SoftReference…...
3.26学习总结
今天主要学习了内部类,但总感觉有点混乱,和之前的抽象啊,接口,多态等概念联系在一起感觉更混乱了,所以打算先把最近学的理清一遍,敲一遍代码再往后学...
京东--数据开发实习生--保险业务部门--一面凉经
Base: 本人投递的是后台开发岗位,调剂到数据开发岗位,京东的数据开发也做后台开发方面的工作,还包括算法、策略、数据挖掘和数据平台搭建之类的职责。面试内容基本只会问简历上的,在此基础上再去考察岗位职责相关的内…...
【Hugging Face 开源库】Diffusers 库 —— 扩散模型
Diffusers 的三个主要组件1. DiffusionPipeline:端到端推理工具__call__ 函数callback_on_step_end 管道回调函数 2. 预训练模型架构和模块UNetVAE(Variational AutoEncoder)图像尺寸与 UNet 和 VAE 的关系EMA(Exponential Moving…...
TypeScript(TS) 的使用初识
我将详细讲解 TypeScript(TS) 的使用。TypeScript 是由微软开发的一种开源编程语言,它是 JavaScript 的超集,通过引入静态类型和面向对象编程特性,增强了 JavaScript 的开发体验和代码质量。TypeScript 最终会被编译成…...
QTcpSocket多线程连接慢问题
20250325记录 环境:Qt5.14.2 64位 msvc编译 在多线程环境下,使用QTcpSocket实现客户端,发现在少部分电脑上,连接时间过长,定时器检查套接字状态时,发现连接处于QAbstractSocket::ConnectingState状态。 …...
Vue的实例
Every Vue application starts with a single Vue component instance as the application root. Any other Vue component created in the same application needs to be nested inside this root component. 每个 Vue 应用都以一个 Vue 组件实例作为应用的根开始。在同一个应…...
[AI绘图] ComfyUI 中自定义节点插件安装方法
ComfyUI 是一个强大的 AI 图像生成工具,支持自定义节点插件扩展其功能。本文介绍 ComfyUI 中安装自定义节点插件的三种方法,包括 Git Clone 方式、插件管理器安装方式,以及手动解压 ZIP 文件的方法,并分析它们的优缺点。 1. Git Clone 方法 使用 git clone 是最稳定且推荐…...
数据库第二周作业
数据库约束、常见语句等 数据库约束 主键约束 #创建表,把id设为主键 mysql> create table test02(-> id int primary key, #----主键约束-> name varchar(50)-> ); Query OK, 0 rows affected (0.02 sec) #插入数据测试 mysql> insert into te…...