Python数据库

1.数据库提供了一种特殊的方式来存储数据,即将较小的信息片段保存起来以备日后恢复使用。
数据库允许你操作数据而无需要将整个数据集加载到内存中。
数据库使得复用数据更容易。
结构化查询语言(SQL)是用于和数据库交互的语言。
SQLite网站的下载页面(http://www.sqlite.org/download.html).我们需要选择“Precompiled Binaries for Windows”下的第一项,这是针对命令行Shell的文件,而不是包含DLL的文件或是分析器文件。
想要与数据库交互,尝试Firefox的插件SQLite Manager。

SQLite中所允许的数据类型

数据类型说明示例
Null空值,就像Python中的none

NULL

Integer整数,和Python中的一样1,-20,45
Real浮点数1.2
Text字符串"","he"
Blob“blob”数据,如一个文件一个图片、一首歌曲、一个Zip文件

2.创建一个表

>>> import sqlite3#导入库
>>> conn=sqlite3.connect('mytext.db')#创建一个数据库的连接
>>> cursor=conn.cursor()#创建一个游标
>>> sql='''create table students(name text,username text,id int)'''
#告诉我们创建一个名为students的表,它的列有name、username、id这些列分别包括文本、文本、整数
>>> cursor.execute(sql)#生成包含SQL语句的一个字符串,并不会创建一个表
<sqlite3.Cursor object at 0x0310AF60>
>>> cursor.close()#使用游标来关闭到数据库的连接

这时你可以在你保存这个脚本的目录,看到一个新的文件:mytext.db

3.添加数据到表中,需要使用insert命令和一些特殊的格式。
insert语句需要3项内容:想要把数据插入到哪张表、哪些列会得到数据,还有数据本身。
insert的格式:一个冒号,后边跟着一个字符串。这叫做具名参数,它告诉SQLite库,这里有我们想要插入的一个项。
使用insert以后,必须执行另外一步,即提交,如果没有提交,用户给我们的数据就会丢失。

import sqlite3
conn=sqlite3.connect('mytext.db')
cursor=conn.cursor()
name=input('name')
username=input('username')
num_id=input('number')
sql='''insert into students
       (name,username,id)
       values
       (:st_name,:st_username,:num_id)'''
cursor.execute(sql,{'st_name':name,'st_username':username,'num_id':num_id})
#添加一个字典,包含了具名参数以及想要插入的项
conn.commit()#提交
cursor.close()

4.查询数据库
查询至少需要两项内容:想要查询哪张表,以及想要查询什么。
最基础的查询语句:select * from tablename 告诉我们从表中查询所有内容,(*)代表的就是所有内容。
fetchall()函数,把所有结果保存到一个新的变量all_students中,然后打印出学生。会返回元组的一个列表,每个元组包含数据库中的一行。

import sqlite3
conn=sqlite3.connect('mytext.db')
cursor=conn.cursor()
sql='select * from students'
results=cursor.execute(sql)
all_students=results.fetchall()
for student in all_students:
    print(student)
#('dfs', 'sdfs', 123)

如果想只得到某些数据,应该放置列的名称,而不是使用星号。

游标是在数据库中用来移动和执行查询的对象。

数据库进阶
1.用WHERE进行过滤
WHERE子句是可以附加在SQL语句末尾的一种特殊语句,调用数据库时,允许我们过滤数据库,从而只返回一个子集。
eg:FROM tablename SELECT [column/*]WHERE Boolean statement
当执行一条WHERE子句查询时,只有Boolean语句为真的情况下,结果才会返回。
WHERE可以用来判断相等或不等,找到类似的项,找到不符合特定条件的项以及判断大于或小于等。
1>判断相等性

SELECT * FROM games WHERE rating='E'

获取games表中,rating值为‘E‘的内容。
注意:这里只使用一个等号而不是在Python表达式中所用的两个等号。
2>判断不等性,将上述语句中的(=)等于符号改为(!=)符号即可

3>用LIKE查找相似的项
当你想要查找包含了另一个字符串的项,可以使用LIKE。
LIKE允许你查找以一个字符串开始、以一个字符串结束或包含一个字符串的项。
eg:SELECT * FROM table WHERE column LIKE '%String'.
LIKE语句使用百分号(%)来创建一个数据库试图匹配的模式。%表示允许SQLite填充任意的其他字符的地方,可以没有任何字符也可以有很多字符。百分号可放在子字符串的开头、结尾或两处都有。
LIKE语句的示例以及选取的结果

语句选取不选取
LIKE "red%"

red rover

red

reddish

Red

Ligh red

credo

LIKE"%red"

red

Ligh red

red rover

credo

reddish

LIKE "%red%"

red rover

red

reddish

credo

Red

SELECT * FROM games WHERE rating LIKE 'E%'.表示查找games表中rating以E开头的所有内容。
4>使用NOT LIKE去查找不相似的项
eg:SELECT * FROM games WHERE rating NOT LIKE 'E%'.表示查找games表中rating不以E开头的所有内容。

5>带大于和小于的查询
SELECT * FROM games WHERE year>2011.表示查找games表中year>2011的所有内容。
也可以使用小于,大于等于,小于等于号来进行过滤

2.用ORDER BY排序
添加ORDER BY子句,以告知数据库按照某种顺序来返回结果。
假设想在数据库中得到所有游戏的名称,并且按照名称来排序

SELECT title FROM games ORDER BY title

这里会按照字母排序返回所有的游戏名称,如果要以字母的逆序来排序,要使用DESC运算符。DESC是跟在想要排序的项后面

SELECT title FROM games ORDER BY title DESC

3.用DISTINCT获取唯一的项
使用DISTINCT时,数据库只返回该列中内容具有唯一性的记录。
eg:SELECT DISTINCT column FROM table

4.用UPDATE修改记录
UPDATE table SET column="some value" WHERE column="some value"
是将WHERE后面的内容改成WHERE前面的内容。也就是该列原本的值是在WHERE后面的column里面的。
使用UPDATE之后,必须用conn.commit()提交修改,否则所做出的修改不会保存。

5.用DELETE删除记录
DELETE FROM table WHERE column=value
DELETE会删除所有与模式匹配的记录。

想学习更多关于SQL的知识,可以通过W3Schools网站(http://www.w3schools.com/sql/default.asp)有一个很好的初学者教程
 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值