Python与数据库

发布于:2025-03-24 ⋅ 阅读:(35) ⋅ 点赞:(0)

目录

一、数据库

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 sqlite3

db = 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 sqlite3

db = 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 sqlite3

db = 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与数据库的全部内容:)