【python】sqlite使用
官方文档:https://docs.python.org/2/library/sqlite3.html
sqlite教程:http://www.runoob.com/sqlite/sqlite-delete.html
安装:
linux系统一般自带sqlite不需安装。在终端输入sqlite3,出现如下提示则表示已经安装了sqlite
SQLite version 3.6.20
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
新建一个数据库:
如下,直接在命令行输入即可
sqlite3 test.db
注意,sqlite会在当前文件目录下生成test.db文件。比如在路径 /home/A/B下生成了test.db,如果想在/home/X/Y目录下使用该数据库,需要加上路径
sqlite3 /home/A/B/test.db
如果没有该文件,sqlite会生成对应文件。
在python中使用sqlite
需要import sqlite3模块,具体使用可以参见上面的链接。主要注意两点:
1.sqlite转义方法
在数据库操作中,经常会用到类似于 select * from ABC where XXX = '%s' % ("""a'bc"d""")的情况。此时%s对应的字符中的引号会导致错误,因此需要转义。一般数据库都会有自己的转义函数。像mysql就有MySQLdb.escape_string() 处理该问题。在sqlite中,用?匹配解决该问题。
即将待插入的值都用?占位,将数据用元组传入。
t = ('RHAT',)
c.execute('SELECT * FROM stocks WHERE symbol=?', t)
print c.fetchone()
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)
这样避免了引号问题,安全性更好。
2.获取表字段名称与表数据对应关系
在pymongo中,使用coll.find()查找信息得到的都是字典,比如{"a":1,"b":2,"c":3},我们很容易通过字典判断字段的取值情况。但是sqlite给出的结果是列表形式,如[1,2,3]并不给出对应的字段名,如果不清楚有哪些字段很难处理。
可以采用如下方法解决:
#coding=utf8
import sqlite3 conn = sqlite3.connect(dbpath)
cursor = self.conn.cursor() #获取字段名称
sql = 'pragma table_info(%s)' % tb_name
cursor.execute(sql)
parg = cursor.fetchall()
col_names = [p[1] for p in parg] #获取字段名称 #获取数据
sql = 'SELECT * FROM %s' % tb_name
for data in cursor.execute(sql):
record = dict(zip(col_names, data)) #将字段名称和数据映射为字典
【python】sqlite使用的更多相关文章
- python sqlite
1.导入Python SQLITE数据库模块 Python2.5之后,内置了SQLite3,成为了内置模块,这给我们省了安装的功夫,只需导入即可~ import sqlite3 2. 创建/打开数据库 ...
- python sqlite 插入的数据含有变量,结果不一致
def insert(): conn = sqlite3.connect("sqlite.db") print "open database passed" t ...
- python sqlite 查询表的字段名 列名
获得查询结果表的列名: [python] view plain copy print ? db = sqlite.connect('data.db') cur = db.cursor() cur ...
- python SQLite说一点点, python使用数据库需要注意的几点
SQLite是一种嵌入式数据库,它的数据库就是一个文件.由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在iOS和Android的App中都可以集成. Python就 ...
- python sqlite中通过字段名获取查询结果
在连sqlite数据库时,用fetchall()查询结果,是用row[0],row[1]这样的方式来打印每列的结果 但是我想用row[“字段名”]方式查询怎么办? import sqlite3 con ...
- python+Sqlite+Dataframe打造金融股票数据结构
5. 本地数据库 很简单的用本地Sqlite查找股票数据. DataSource类,返回的是Dataframe物件.这个Dataframe物件,在之后的业务,如计算股票指标,还需要特别处理. impo ...
- Python——SQLite
一.连接数据库 import sqlite3 conn = sqlite3.connect('数据库名.db') 二.插入 import sqlite3 conn = sqlite3.connect( ...
- [python]用Python进行SQLite数据库操作
用Python进行SQLite数据库操作 1.导入Python SQLITE数据库模块 Python2.5之后,内置了SQLite3,成为了内置模块,这给我们省了安装的功夫,只需导入即可~ ]: u ...
- sqlite以及python的应用
有点乱,自己平时,遇到了就记下来,所以没整理. 数据库sqlite,以及Qt对数据库的操作 sql学习网址: sqlite官网:http://www.sqlite.org http://www.w3s ...
- 使用 Python 的 SQLite JSON1 和 FTS5 扩展
早在九月份,编程界出现一个名为 json1.c 的文件,此前这个文件一直在 SQLite 的库里面.还有,笔者也曾总结通过使用新的 json1 扩展来编译 pysqlite 的技巧.但现在随着 SQL ...
随机推荐
- EF-联合查询-结果集-Group by-统计数目
EF框架用着痛并且快乐着··· 毕竟用习惯了SQL语句直接硬查的··· SELECT C0.ID,C_C.Name,C_C.C_COUNT FROM article_type C0 INNER JOI ...
- web 开发前端学习
调试插件:http://www.getpostman.com/ http://bootstrap.evget.com/javascript.html bootstrap: http://www.bo ...
- mysql 表锁问题
select * from information_schema.INNODB_lock_waits; select * from information_schema.INNODB_locks; S ...
- Asp.net 网站防攻击安全设置
针对已解密的_ViewStat参数漏洞整改建议:在<system.web>下添加 <machineKey validation="3DES"/> 禁用脚本调 ...
- C#网络爬虫 WebUtility使用 转义字符 urlCode
背景: 在C#写网络爬虫时候,有时候需要将html中的转义字符进行处理,还有网址中的中文处理 一.html转义字符处理 1.ASP.NET中的html解析 HttpUtility.HtmlDecode ...
- Knockout.Js案例二Working With Lists And Collections
案例一:Foreach绑定 通常,您要生成重复的UI元素,特别是当显示列表,用户可以添加和删除元素.KO.JS让你轻松,使用的数组和foreach绑定. 在接下来的几分钟,您将构建一个动态UI保留席位 ...
- BZOJ2843——极地旅行社
1.题目大意:动态树问题,点修改,链查询.另外说明双倍经验题=bzoj1180 2.分析:lct模板题,练手的 #include <stack> #include <cstdio&g ...
- BZOJ2631——tree
1.题目大意:bzoj1798的lct版本 2.分析:这个把线段树改成splay就好 #include <stack> #include <cstdio> #include & ...
- JavaScript的作用域与作用域链
作用域 作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期.可以说,变量和函数在什么时候可以用,什么时候被摧毁,这都与作用域有关. JavaScript中,变量的作用域有全局 ...
- PHP--获取响应头(Response Header)方法
方法一: $baiduUrl = "http://www.baidu.com/link"; file_get_contents($baiduUrl); $responseInf ...