在web开发中,经常要与数据库打交道。数据库分为关系型数据库和非关系型数据库。其中最常用的是关系型数据库,也叫SQL数据库。
那么Python中如何操作SQL数据库呢?
操作环境:Python 3.6.0
SQL版本:sqlite3
下面我们以图书为例,在Python控制台进行演示操作。
创建连接
conn = sqlite3.connect('book.db')
c = conn.cursor()
cursor叫做游标,用来执行SQL语句。
创建表格
sql = "create table BOOK(
title text,
author text,
price integer,
pubdate text
)"
c.execute(sql)
conn.commit()
SQL支持的数据类型有Text,Integer等。
添加数据
sql = "insert into BOOK values ('python','jason',36,'2017-1-14')"
c.execute(sql)
sql = "insert into BOOK values ('http','tom',42,'2016-2-14')"
c.execute(sql)
conn.commit()
修改数据
sql = "update BOOK set title='flask' where rowid=1"
c.execute(sql)
conn.commit()
删除数据
sql = "delete from BOOK where title='flask'"
c.execute(sql)
conn.commit()
搜索数据
sql = "select * from BOOK"
#执行SQL之后,得到corsor对象。可以使用for循环遍历出结果。
rows= c.execute(sql)
for row in books:
print(row)
'''result:
('python','jason',36,'2017-1-14')
('http','tom',42,'2016-2-14')'''
上面我们介绍了创建表格以及对表格的四种操作。除了这些,还有几点需要注意的地方;
- 以删除数据为例。实际工作中,删除的数据往往是从外部获取得到的,并不是写死的。
title = ('linux',)
#insecure
sql = "delete BOOK where title={}".format('linux')
c.execute(sql)
#do this instead
sql = "delete BOOK where title=?"
c.execute(sql,title)
我们使用参数化查询,来防止SQL注入。参数用tuple的形式传递。
- 搜索数据的结果,可以用fetchall()来处理。
sql = "select * from BOOK"
c.execute(sql)
lst = c.fetchall()
for row in lst:
print(row)
'''result:
('python','jason',36,'2017-1-14')
('http','tom',42,'2016-2-14')'''
当然,除了fetchall()以外,还有fetchone(),fetchmany()等。