有一堆文件,便于快速检索
数据库文件里可以存在多张表
表由记录构成
记录由字段构成,描述一个事物的多个属性(类的多个属性)
数据操作需要使用SQL数据库查询语句
SQL 中文全称 结构化查询语言
SQL UPDATE 语句 (w3school.com.cn)
数据操作语言DML
- SELECT - 从数据库表中获取数据
- UPDATE - 更新数据库表中的数据
- DELETE - 从数据库表中删除数据
- INSERT INTO - 向数据库表中插入数据
数据定义语言DDL
- CREATE DATABASE - 创建新数据库
- ALTER DATABASE - 修改数据库
- CREATE TABLE - 创建新表
- ALTER TABLE - 变更(改变)数据库表
- DROP TABLE - 删除表
- CREATE INDEX - 创建索引(搜索键)
- DROP INDEX - 删除索引
import sqlite3
#链接数据库,若不存在则自动创建
db=sqlite3.connect("D:/Diary/MarkDown/pythonStudy/DataPacket/test001.db")
cur=db.cursor()#获取光标,要操作数据库一般要通过光标进行
# 如果表students不存在就创建它
sql='''CREATE TABLE if not exists students(id integer primary key,name text,gpa real,birthday date,age integer,picture blob)'''
cur.execute(sql)#执行SQL命令
#插入一个记录
cur.execute("insert into students values(202100202098,'Caaaaaan',3.83,'2002-10-22',18,null)")
mylist=[(1700,'LiZ',"3.25",'2000-12-01',17,None),(1890,'WuZ',"4.25",'2010-01-01',17,None)]
for s in mylist:
# ?一一对应后面的某个
cur.execute('INSERT INTO students VALUES(?,?,?,?,?,?)',(s[0],s[1],s[2],s[3],s[4],s[5]))
db.commit()#真正的写入,写入操作都需要这个
cur.close()#关闭光标
db.close() #关闭数据库
SELECT 语句用于从表中选取数据。
结果被存储在一个结果表中(称为结果集)。
SELECT 列名称 FROM 表名称
以及:
SELECT * FROM 表名称
SELECT * FROM students =>检索students表中全部记录
SELECT * FROM students ORDER BY age =>检索students表中全部记录,并按年龄排序
SELECT * FROM students ORDER BY age DESC=>按年龄降序
SELECT name,age FROM students =>检索students表中全部记录,但每个记录只取name和age两个字段
SELECT * FROM students WHERE name="Caaaaaan" =>检索students表中全部name字段为Caaaaaan记录
!!!=>WHERE表示检索条件
SELECT * FROM students WHERE name="Caaaaaan" and age>8 order by gpa
**注释:**SQL 语句对大小写不敏感。SELECT 等效于 select。
import sqlite3
db=sqlite3.connect("D:/Diary/MarkDown/pythonStudy/DataPacket/test001.db")
cur=db.cursor()#获取光标,要操作数据库一般要通过光标进行
sql='select * from students' #检索全部记录
cur.execute(sql)
x=cur.fetchone() #fetchone取满足条件的第一条记录
print(x)
print(x[1])
for x in cur.fetchall():#fetchall取得所有满足条件的记录
print(x[:-2]) #后两个字段不输出
cur.execute("select * from students where name='Liz'")
x=cur.fetchone()
if x==None:
print("No");
else:
print(x)
cur.close()
db.close()
输出:
(1700, 'LiZ', 3.25, '2000-12-01', 17, None)
LiZ
(1890, 'WuZ', 4.25, '2010-01-01')
(202100202098, 'Caaaaaan', 3.83, '2002-10-22')
No
Update 语句用于修改表中的数据。
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
LastName | FirstName | Address | City |
---|---|---|---|
Gates | Bill | Xuanwumen 10 | Beijing |
Wilson | Champs-Elysees |
我们为 lastname 是 “Wilson” 的人添加 firstname:
UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson'
LastName | FirstName | Address | City |
---|---|---|---|
Gates | Bill | Xuanwumen 10 | Beijing |
Wilson | Fred | Champs-Elysees |
我们会修改地址(address),并添加城市名称(city):
UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing' WHERE LastName = 'Wilson'
LastName | FirstName | Address | City |
---|---|---|---|
Gates | Bill | Xuanwumen 10 | Beijing |
Wilson | Fred | Zhongshan 23 | Nanjing |
import sqlite3
db=sqlite3.connect("D:/Diary/MarkDown/pythonStudy/DataPacket/test001.db")
cur=db.cursor()
sql='UPDATE students SET gpa=?,age=? where name=?'
cur.execute(sql,(4.1,20,'Caaaaaan'))
db.commit()#!!!要真正写入
cur.close()
db.close()
设置blob字段(二进制字段)的值:
比如在数据库中,我希望表中的图片可以读进去
import sqlite3
import requests#访问网络资源的库
#以二进制的方式打开文件
f=open("C:/Users/世界第一可爱/Desktop/办理/153511-1489044911de46.jpg",'rb')
img=f.read()
f.close()
db=sqlite3.connect("D:/Diary/MarkDown/pythonStudy/DataPacket/test001.db")
cur=db.cursor()
sql="update students set picture=? Where name='Caaaaaan'"
cur.execute(sql,(img,))#设置caaaaaan的照片
#从网络获取图片
imgUrl="https://tse1-mm.cn.bing.net/th/id/R-C.ce0ade2284efcd8231d070f20b4e93bd?rik=bPtI1BmnIr2o1Q&riu=http%3a%2f%2fwww.yimin11.com%2fPublic%2fAdmin%2fUploads%2f2017-01-23%2f58857cd1b2f25.jpg&ehk=k14spxJOGS9OU%2fFvajDuleA8iJ5iGu2OSLi9Dy9sGXk%3d&risl=&pid=ImgRaw&r=0"
imgStream=requests.get(imgUrl,stream=True)#获取网址代表的图片
sql="update students set picture=? Where name='LiZ'"
cur.execute(sql,(imgStream.content,))
db.commit()
cur.close()
db.close()
import sqlite3
import requests#访问网络资源的库
#以二进制的方式打开文件
f=open("C:/Users/世界第一可爱/Desktop/办理/153511-1489044911de46.jpg",'rb')
img=f.read()
f.close()
db=sqlite3.connect("D:/Diary/MarkDown/pythonStudy/DataPacket/test001.db")
cur=db.cursor()
sql="update students set picture=? Where name='Caaaaaan'"
cur.execute(sql,(img,))#设置caaaaaan的照片
#从网络获取图片
imgUrl="https://tse1-mm.cn.bing.net/th/id/R-C.ce0ade2284efcd8231d070f20b4e93bd?rik=bPtI1BmnIr2o1Q&riu=http%3a%2f%2fwww.yimin11.com%2fPublic%2fAdmin%2fUploads%2f2017-01-23%2f58857cd1b2f25.jpg&ehk=k14spxJOGS9OU%2fFvajDuleA8iJ5iGu2OSLi9Dy9sGXk%3d&risl=&pid=ImgRaw&r=0"
imgStream=requests.get(imgUrl,stream=True)#获取网址代表的图片
sql="update students set picture=? Where name='LiZ'"
cur.execute(sql,(imgStream.content,))
db.commit()
cur.close()
db.close()