初入数据库python语言

数据库编程

有一堆文件,便于快速检索

数据库文件里可以存在多张表

表由记录构成

记录由字段构成,描述一个事物的多个属性(类的多个属性)

数据操作需要使用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() #关闭数据库

数据库的查询和修改

SQL SELECT 语句

SELECT 语句用于从表中选取数据。

结果被存储在一个结果表中(称为结果集)。

SQL 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 语句用于修改表中的数据。

语法:

UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值

Person:

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()

关于删除DELETE 和DROP TABLE进入网站了解具体语法

数据库处理二进制字段

  • 设置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()

你可能感兴趣的:(PythonStudy,数据库,sql,database,python)