Python操作SQLite简明教程


Posted in Python onJuly 10, 2014

一、SQLite简介

SQLite是一个包含在C库中的轻量级数据库。它并不需要独立的维护进程,并且允许使用非标准变体(nonstandard variant)的SQL查询语句来访问数据库。一些应用可是使用SQLite保存内部数据。它也可以在构建应用原型的时候使用,以便于以后转移到更大型的数据库,比如PostgreSQL或者Oracle。

sqlite3模块由Gerhard Häring编写,提供了一个SQL接口,这个接口的设计遵循了由PEP 249描述的DB-API 2.0说明书。

二、创建并打开数据库

为了使用这个模块,必须先创建一个连接(Connection)对象来代表数据库。在以下的例子中,数据将会被保存在 example.db 文件中:

import sqlite3

conn = sqlite3.connect('example.db')

如果指定的数据库存在,就会直接打开这个数据库,否则将新建一再打开。
也可以提供专用名 :memory: 来在内存中建立数据库。

三、数据库连接对象

一旦拥有了连接(Connection)对象,就可以创建游标(Cursor)对象并调用他的execute()方法来执行SQL语句:

c = conn.cursor()

 

 # Create table 

 c.execute('''CREATE TABLE stocks              

     (date text, trans text, symbol text, qty real, price real)''')

 

 # Insert a row of data 

 c.execute("INSERT INTO stocks VALUES ('2006-01-05','BUY','RHAT',100,35.14)")

 

 # Save (commit) the changes 

 conn.commit()

 

 # We can also close the connection if we are done with it. 

 # Just be sure any changes have been committed or they will be lost. 

 conn.close()

 

保存后的数据是持久的,并且可以在以后的访问中可用。

四、增删改查

1.建(create)表

c.execute("create table catalog (id integer primary key,pid integer,name varchar(10) UNIQUE,nickname text NULL)")

上面语句创建了一个叫catalog的表,它有一个主键id,一个pid,和一个name,name是不可以重复的,以及一个nickname默认为NULL。

2.删除表(DROP),清空表(TRUNCATE)

c.execute("drop table catalog")

上面语句将catalog表删除。

另外SQLite中没有清空表的操作,使用如下方式替代:

c.execute("delete from catalog")

3.插入(insert)数据,更改(uptate)数据

通常SQL语句中会用到python变量作为值(value)。不建议直接使用python的字符串运算来构造查询语句,因为这样是不安全的,会使你的程序容易受到SQL注入攻击。

可以使用DB-API提供的参数代换。在想使用值(value)的地方放置一个'?'作为占位符,然后提供一个由值(value)组成的元组作为游标(cursor)中execute()方法的第二个参数。(其他的数据库模块可能使用别的占位符,比如 '%s' 或者 ':1')

# Larger example that inserts many records at a time

purchases = [('2006-03-28', 'BUY', 'IBM', 1000, 45.00),

('2006-04-05', 'BUY', 'MSFT', 1000, 72.00),

('2006-04-06', 'SELL', 'IBM', 500, 53.00),

]

c.executemany('INSERT INTO stocks VALUES (?,?,?,?,?)', purchases)
c.execute("UPDATE catalog SET trans='SELL' WHERE symbol = 'IBM'")

4.查询(select)数据

正如前面所说,提倡使用元组进行操作。

# Never do this -- insecure!

symbol = 'RHAT'

c.execute("SELECT * FROM stocks WHERE symbol = '%s'" % symbol)
# Do this instead

t = ('RHAT',)

c.execute('SELECT * FROM stocks WHERE symbol=?', t)

print c.fetchone()

5.删除(delete)数据

t=('RHAT')

c.execute("DELETE * FROM stocks WHERE symbol=?", t)
Python 相关文章推荐
Linux下将Python的Django项目部署到Apache服务器
Dec 24 Python
举例简单讲解Python中的数据存储模块shelve的用法
Mar 03 Python
使用Python的Twisted框架编写非阻塞程序的代码示例
May 25 Python
Windows下Anaconda的安装和简单使用方法
Jan 04 Python
Python常用字符串替换函数strip、replace及sub用法示例
May 21 Python
python检索特定内容的文本文件实例
Jun 05 Python
Pyinstaller打包.py生成.exe的方法和报错总结
Apr 02 Python
python实现飞机大战小游戏
Nov 08 Python
基于TensorFlow常量、序列以及随机值生成实例
Jan 04 Python
Python接口测试结果集实现封装比较
May 01 Python
pytorch中[..., 0]的用法说明
May 20 Python
Django框架中表单的用法
Jun 10 Python
Python读取图片EXIF信息类库介绍和使用实例
Jul 10 #Python
Python采集腾讯新闻实例
Jul 10 #Python
使用wxpython实现的一个简单图片浏览器实例
Jul 10 #Python
Python语言的12个基础知识点小结
Jul 10 #Python
使用Python获取Linux系统的各种信息
Jul 10 #Python
Django中实现一个高性能计数器(Counter)实例
Jul 09 #Python
python实现的登录和操作开心网脚本分享
Jul 09 #Python
You might like
Dedecms V3.1 生成HTML速度的优化办法
2007/03/18 PHP
php在字符串中查找另一个字符串
2008/11/19 PHP
Php Image Resize图片大小调整的函数代码
2011/01/17 PHP
php学习笔记 面向对象中[接口]与[多态性]的应用
2011/06/16 PHP
遍历指定目录下的所有目录和文件的php代码
2011/11/27 PHP
php中动态调用函数的方法
2015/03/16 PHP
ThinkPHP自定义函数解决模板标签加减运算的方法
2015/07/03 PHP
PHP封装的验证码工具类定义与用法示例
2018/08/22 PHP
laravel框架中控制器的创建和使用方法分析
2019/11/23 PHP
Js 获取当前日期时间及其它操作实现代码
2021/03/04 Javascript
JavaScript基础语法让人疑惑的地方小结
2012/05/23 Javascript
jQuery on()方法示例及jquery on()方法的优点
2015/08/27 Javascript
分享javascript计算时间差的示例代码
2020/03/19 Javascript
Bootstrap表单布局样式源代码
2016/07/04 Javascript
Javascript动画效果(4)
2016/10/11 Javascript
一步步教你利用Canvas对图片进行处理
2017/09/19 Javascript
node作为中间服务层如何发送请求(发送请求的实现方法详解)
2018/01/02 Javascript
JS数据类型(基本数据类型、引用数据类型)及堆和栈的区别分析
2020/03/04 Javascript
[02:26]2016国际邀请赛8月3日开战 中国军团出征西雅图
2016/08/02 DOTA
python调用shell的方法
2013/11/20 Python
python处理json数据中的中文
2014/03/06 Python
python遍历文件夹找出文件夹后缀为py的文件方法
2018/10/21 Python
Window环境下Scrapy开发环境搭建
2018/11/18 Python
浅谈python 读excel数值为浮点型的问题
2018/12/25 Python
django 邮件发送模块smtp使用详解
2019/07/22 Python
django 框架实现的用户注册、登录、退出功能示例
2019/11/28 Python
解决python运行效率不高的问题
2020/07/20 Python
python 如何区分return和yield
2020/09/22 Python
详解Canvas实用库Fabric.js使用手册
2019/01/07 HTML / CSS
联想加拿大官方网站:Lenovo Canada
2018/04/05 全球购物
通信工程毕业生求职信
2013/11/16 职场文书
歌唱比赛主持词
2014/03/18 职场文书
2015年档案管理工作总结
2015/04/08 职场文书
各类场合主持词开场白范文集锦
2019/08/16 职场文书
在前女友婚礼上,用Python破解了现场的WIFI还把名称改成了
2021/05/28 Python
vue如何实现关闭对话框后刷新列表
2022/04/08 Vue.js