放在数据库中的数据总是包含在一个表中。一个数据库可以有1张或者多张表。
数据类型 | 说明 |
---|---|
Null | 空值,就像python中的none |
Integer | 整数 |
Real | 浮点数 |
Text | 字符串 |
Blob | “blob”数据,如一个文件 |
以下这个代码片是用一个创建数据库的例子告诉我们大致代码包含哪些部分。 |
# python3实现SQL的基本操作
import sqlite3
# 想使用SQL的话,必须导入sqlite3库
conn = sqlite3.connect('mytest.db')
# 创建到一个数据库的连接。就像打开一个文件读取它一样。
# 这个文件可以使用绝对路径或相对路径(根据当前工作目录来指明文件的位置)
# 如果没有这个文件,会在路径所指创建一个,例如本例就在当前目录创建。
cursor = conn.cursor()
# 创建了一个游标,用来在数据库中移动,执行SQL语句,并且获取数据。
sql = '''create table students (name text, username text, id int)'''
# 此部分是sql语句,本例是创建一个表,其中包括列:name、username、id,这些列包含文本和整数。
cursor.execute(sql)
# 但是我们仅仅定义了这个sql语句还不够,需要execute来执行这条语句。
cursor.close()
# 做完这些需要使用游标关闭与数据库的连接。
import sqlite3
conn = sqlite3.connect('mytest.db')
cursor = conn.cursor()
name_i = input('Student\'s name:')
username_i = input('Student\'s username:')
id_i = input('Student\'s id number:')
# 此时先将数据输入到变量中,为方便区分具名参数,我们后加_i
sql2 = ''' insert into students (name, username, id)
values (:st_name, :st_username, :id_num)'''
cursor.execute(sql2, {'st_name': name_i, 'st_username': username_i, 'id_num': id_i})
# 第一行意思是插入数据到“studens”表的name、username、id列。
# 第二行的三个参数都是具名参数,比如说st_name对应name这一列。
# 告诉我们要把第三行代码,键"st_name"的值对应的name_i的值放到它对应的name列中。
conn.commit()
# 这句很关键,即提交,sqlite不会保存新的数据,知道我们告诉它提交。
cursor.close()
import sqlite3
conn = sqlite3.connect('mytest.db')
cursor = conn.cursor()
sql3 = '''select * from students'''
# "*"代表所有内容。此代码我们搜寻“students”表的所有内容。
# 如果只是想看students表的id列,eg:select id from students
results = cursor.execute(sql)
# 数据库将返回结果到results变量中
all_students = results.fetchall()
# 因为返回的results类似于:
#所以需要使用fetchall函数把所有结果保存到新的变量中
print(all_students)
conn.commit()
cursor.close()
接下来我们不引入例子,只介绍sql语句!
此时我们称表格中的某行为记录
接上篇,我们已经知道了如何创建一个简单的查询:
sql= '''select */column from tablename'''
# sql语句意为从表格中挑选全部内容或某些列项
下面我们正式介绍WHERE子句的用法。
WHERE子句是可以附加在SQL语句末尾的一种特殊语句。当调用数据库时,它允许我们过滤数据库而只返回一个子集。带SQL的查询语句如下:
sql= '''select */column from tablename where Boolean statement'''
# sql语句意为从表格中挑选 符合Boolean语句为真的条件 的 全部内容或某些列项 。
sql= '''select */column from tablename where column="string" '''
# sql语句意为从表格中挑选 某列等于string的条件 的 全部内容或某些列项 。
其中,也可以根据所需条件,将 “=” 换位 “!=” 。
sql= '''select */column from tablename where column>value '''
# sql语句意为从表格中挑选 某列的值大于value的条件 的 全部内容或某些列项 。
当我们想要查找包含了另一个字符串的项,可以使用LIKE。LIKE允许我们查找以一个字符串开始、以一个字符串结束、包含一个字符串的项。
sql= '''select */column from tablename where column LIKE "%string%" '''
# sql语句意为从表格中挑选 字符串开头、结尾、开头和结尾含有字符串string 的 全部内容或某些列项 。
语句 | 选取 |
---|---|
LIKE “red%” | red rover 、red、reddish |
LIKE “%red” | Light red、red |
LIKE “%red%” | red rover 、red、reddish、Light red |
同理,将NOT LIKE替换LIKE就达到了相反的效果。 |
当我们对数据库进行查询时,得到的结果都没有特定的顺序。可以添加ORDER BY子句,以告知数据库按照某种顺序来返回结果。
sql= '''select */column from tablename ORDER BY column '''
# sql语句意为从数据库中得到 按照名称来排序 的 全部内容或某些列项 。
我们在SELECT语句中使用distinct时,数据库只返回该列中具有唯一性的项。
sql= '''select distinct column from tablename '''
# sql语句意为从数据库中得到 某列column具有唯一性的 的 全部内容或某些列项 。
如果我们有需要修改的记录,我们可以使用UPDATE来完成。
sql= '''UPDATE tablename set (...) WHERE Boolean statement '''
# sql语句意为修改(...)内容 从数据库中得到 满足Boolean为真的条件的 的 全部内容或某些列项 。
sql= '''delete from tablename where Boolean statement '''
# sql语句意为从表格中删除 符合Boolean语句为真的条件 的 全部记录 。