详解Python 数据库 (sqlite3)应用


Posted in Python onDecember 07, 2016

Python自带一个轻量级的关系型数据库SQLite。这一数据库使用SQL语言。SQLite作为后端数据库,可以搭配Python建网站,或者制作有数据存储需求的工具。SQLite还在其它领域有广泛的应用,比如HTML5和移动端。Python标准库中的sqlite3提供该数据库的接口。

我将创建一个简单的关系型数据库,为一个书店存储书的分类和价格。数据库中包含两个表:category用于记录分类,book用于记录某个书的信息。一本书归属于某一个分类,因此book有一个外键(foreign key),指向catogory表的主键id。

详解Python 数据库 (sqlite3)应用

创建数据库

我首先来创建数据库,以及数据库中的表。在使用connect()连接数据库后,我就可以通过定位指针cursor,来执行SQL命令:

# By Vamei
import sqlite3

# test.db is a file in the working directory.
conn = sqlite3.connect("test.db")

c = conn.cursor()

# create tables
c.execute('''CREATE TABLE category
   (id int primary key, sort int, name text)''')
c.execute('''CREATE TABLE book
   (id int primary key, 
    sort int, 
    name text, 
    price real, 
    category int,
    FOREIGN KEY (category) REFERENCES category(id))''')

# save the changes
conn.commit()

# close the connection with the database
conn.close()

SQLite的数据库是一个磁盘上的文件,如上面的test.db,因此整个数据库可以方便的移动或复制。test.db一开始不存在,所以SQLite将自动创建一个新文件。

利用execute()命令,我执行了两个SQL命令,创建数据库中的两个表。创建完成后,保存并断开数据库连接。

插入数据

上面创建了数据库和表,确立了数据库的抽象结构。下面将在同一数据库中插入数据:

# By Vamei

import sqlite3

conn = sqlite3.connect("test.db")
c  = conn.cursor()

books = [(1, 1, 'Cook Recipe', 3.12, 1),
      (2, 3, 'Python Intro', 17.5, 2),
      (3, 2, 'OS Intro', 13.6, 2),
      ]

# execute "INSERT" 
c.execute("INSERT INTO category VALUES (1, 1, 'kitchen')")

# using the placeholder
c.execute("INSERT INTO category VALUES (?, ?, ?)", [(2, 2, 'computer')])

# execute multiple commands
c.executemany('INSERT INTO book VALUES (?, ?, ?, ?, ?)', books)

conn.commit()
conn.close()

插入数据同样可以使用execute()来执行完整的SQL语句。SQL语句中的参数,使用"?"作为替代符号,并在后面的参数中给出具体值。这里不能用Python的格式化字符串,如"%s",因为这一用法容易受到SQL注入攻击。

我也可以用executemany()的方法来执行多次插入,增加多个记录。每个记录是表中的一个元素,如上面的books表中的元素。

 查询

在执行查询语句后,Python将返回一个循环器,包含有查询获得的多个记录。你循环读取,也可以使用sqlite3提供的fetchone()和fetchall()方法读取记录:

# By Vamei

import sqlite3

conn = sqlite3.connect('test.db')
c = conn.cursor()

# retrieve one record
c.execute('SELECT name FROM category ORDER BY sort')
print(c.fetchone())
print(c.fetchone())

# retrieve all records as a list
c.execute('SELECT * FROM book WHERE book.category=1')
print(c.fetchall())

# iterate through the records
for row in c.execute('SELECT name, price FROM book ORDER BY sort'):
  print(row)

更新与删除

你可以更新某个记录,或者删除记录:

# By Vamei

conn = sqlite3.connect("test.db")
c = conn.cursor()

c.execute('UPDATE book SET price=? WHERE id=?',(1000, 1))
c.execute('DELETE FROM book WHERE id=2')

conn.commit()
conn.close()

你也可以直接删除整张表:

c.execute('DROP TABLE book')

如果删除test.db,那么整个数据库会被删除。

 总结

sqlite3只是一个SQLite的接口。想要熟练的使用SQLite数据库,还需要学习更多的关系型数据库的知识。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python标准库之多进程(multiprocessing包)介绍
Nov 25 Python
python基于pygame实现响应游戏中事件的方法(附源码)
Nov 11 Python
使用paramiko远程执行命令、下发文件的实例
Oct 01 Python
python3下使用cv2.imwrite存储带有中文路径图片的方法
May 10 Python
使用PyInstaller将python转成可执行文件exe笔记
May 26 Python
浅析python3字符串格式化format()函数的简单用法
Dec 07 Python
Python中函数的返回值示例浅析
Aug 28 Python
YUV转为jpg图像的实现
Dec 09 Python
Python中Subprocess的不同函数解析
Dec 10 Python
Tensorflow中的图(tf.Graph)和会话(tf.Session)的实现
Apr 22 Python
基于Python快速处理PDF表格数据
Jun 03 Python
Python面试不修改数组找出重复的数字
May 20 Python
Python应用03 使用PyQT制作视频播放器实例
Dec 07 #Python
Python 实现一个颜色色值转换的小工具
Dec 06 #Python
python 线程的暂停, 恢复, 退出详解及实例
Dec 06 #Python
python 实现删除文件或文件夹实例详解
Dec 04 #Python
python 根据正则表达式提取指定的内容实例详解
Dec 04 #Python
python xml.etree.ElementTree遍历xml所有节点实例详解
Dec 04 #Python
Python性能提升之延迟初始化
Dec 04 #Python
You might like
PHP读取xml方法介绍
2013/01/12 PHP
php从csv文件读取数据并输出到网页的方法
2015/03/14 PHP
php判断是否连接上网络的方法实例详解
2016/12/14 PHP
详解php用curl调用接口方法,get和post两种方式
2017/01/13 PHP
PHP 获取指定地区的天气实例代码
2017/02/08 PHP
PHP中ltrim()函数的用法与实例讲解
2019/03/28 PHP
PHP常用正则表达式精选(推荐)
2019/05/28 PHP
php中的依赖注入实例详解
2019/08/14 PHP
Js 弹出框口并返回值的两种常用方法
2010/12/30 Javascript
JavaScript操作XML 使用百度RSS作为新闻源示例
2012/02/17 Javascript
深入了解javascript中的prototype与继承
2013/04/14 Javascript
JS验证日期的格式YYYY-mm-dd 具体实现
2013/06/29 Javascript
jquery.autocomplete修改实现键盘上下键自动填充示例
2013/11/19 Javascript
js数组去重的常用方法总结
2014/01/24 Javascript
深入剖析JavaScript中的枚举功能
2014/03/06 Javascript
js中unicode转码方法详解
2015/10/09 Javascript
基于jquery实现鼠标滚轮驱动的图片切换效果
2015/10/26 Javascript
仿百度换肤功能的简单实例代码
2016/07/11 Javascript
AngularJS过滤器filter用法分析
2016/12/11 Javascript
解决bootstrap下拉菜单点击立即隐藏bug的方法
2017/06/13 Javascript
使用watch在微信小程序中实现全局状态共享
2019/06/03 Javascript
vuex+axios+element-ui实现页面请求loading操作示例
2020/02/02 Javascript
深入了解JavaScript词法作用域
2020/07/29 Javascript
Python类的基础入门知识
2008/11/24 Python
深入理解Python 代码优化详解
2014/10/27 Python
python获得两个数组交集、并集、差集的方法
2015/03/27 Python
wxPython之解决闪烁的问题
2018/01/15 Python
linux查找当前python解释器的位置方法
2019/02/20 Python
关于pytorch多GPU训练实例与性能对比分析
2019/08/19 Python
iPhoneX安全区域(Safe Area)底部小黑条在微信小程序和H5的屏幕适配
2020/04/08 HTML / CSS
美国购买体育、音乐会和剧院门票网站:SelectATicket
2019/09/08 全球购物
大学三年的自我评价
2013/12/25 职场文书
如何写一份好的英文求职信
2014/03/19 职场文书
2014教师教育实践活动对照检查材料思想汇报
2014/09/21 职场文书
出差报告怎么写
2014/11/06 职场文书
项目建议书
2015/02/04 职场文书