8.1.2 Cursor 对象
游标Cursor也是sqlite3模块中比较重要的一个类,下面简单介绍下Cursor对象的常用方法。
1 execute(sql[,parameters])
该方法用于执行一条SQL语句,下面的代码演示了用法,以及为SQL语句传递参数的两种方法,分别使用问号好命名变量作为占位符。
import sqlite3
conn = sqlite3.connect('example.db')
cur = conn.cursor()
cur.execute('create table people(name_last,age)')
who = 'Dong'
age = 38
#使用问号做占位符
cur.execute('insert into people values(?,?)',(who,age))
conn.commit()
#使用命令变量做占位符
cur.execute('select * from people where name_last = :who and age = :age',{"who":who,"age":age})
print(cur.fetchone()) #('Dong', 38)
conn.close()
2 executemany(sql,seq_of_parameters)
该方法用来对于所有给定参数执行用一个SQL语句,参数序列可以使用不同的方式产生,例如下面的代码使用迭代来产生参数序列:
import sqlite3 #自定义迭代器,按顺序生成小写字母
class IterChars:
def __init__(self):
self.count = ord('a') def __iter__(self):
return self def __next__(self):
if self.count > ord('z'):
raise StopIteration
self.count += 1
return (chr(self.count - 1),) conn = sqlite3.connect(':memory:')
cur = conn.cursor()
cur.execute('create table characters(c)') #创建迭代器对象
theIter = IterChars() #插入记录,每次插入一个英文小写字母
cur.executemany('insert into characters(c) values(?)',theIter)
conn.commit()
#读取并显示所有记录
cur.execute('select * from characters') #读取并显示所有记录
print(cur.fetchall())
conn.close()
下面的代码则使用了更为简洁的生成器来产生参数:
import sqlite3
import string #包含yield语句的函数可以用来创建生成器对象
def char_generator():
for c in string.ascii_lowercase:
yield(c,) conn = sqlite3.connect(":memory:")
cur = conn.cursor()
cur.execute("create table characters(c)") #使用生成器对象得到参数序列
cur.executemany('insert into characters(c) values(?) ',char_generator())
conn.commit()
cur.execute('select c from characters')
print(cur.fetchall()) #[('a',), ('b',), ('c',), ('d',), ('e',), ('f',), ('g',), ('h',), ('i',), ('j',),
# ('k',), ('l',), ('m',), ('n',), ('o',), ('p',), ('q',), ('r',), ('s',), ('t',),
# ('u',), ('v',), ('w',), ('x',), ('y',), ('z',)]
下面的代码则使用直接创建的序列作为SQL语句的参数:
import sqlite3
persons = [('Hugo','Boss'),('Calvin','Klein')]
conn=sqlite3.connect(':memory:') #创建表
conn.execute('create table person(firstname,lastname)') #插入数据
conn.executemany('insert into person(firstname,lastname) values(?,?)',persons) #显示数据
for row in conn.execute('select firstname,lastname from person'):
print(row) print('I just deleted',conn.execute('delete from person').rowcount,'rows') '''
('Hugo', 'Boss')
('Calvin', 'Klein')
I just deleted 2 rows
'''
3 fetchone()、fetchmany(size=cursor.arraysize)、fetchall()
这3个方法用来读取数据。假设数据库通过下面的代码创建并插入数据:
import sqlite3 conn = sqlite3.connect(r'D:/addressBook.db')
#创建表
conn.execute('create table addressList(name,sex,phon,QQ,address)')
# 创建游标
cur = conn.cursor() #插入数据
cur.execute('''insert into addressList(name,sex,phon,QQ,address) values('王小丫','女','13888997011','66735','北京市')''')
cur.execute('''insert into addressList(name,sex,phon,QQ,address) values('李莉','女','15808066055','675797','天津市')''')
cur.execute('''insert into addressList(name,sex,phon,QQ,address) values('李星草','男','15912108090','3232099','昆明市')''') #提交事务,把数据写入数据库
conn.commit()
conn.close()
#下面的代码演示了使用fetchall()读取数据的方法:
import sqlite3 conn = sqlite3.connect(r'D:/addressBook.db')
cur = conn.cursor()
cur.execute('select * from addressList') #查询表中所有数据,将查询结果放在游标中 #获取游标中所有的查询结果
li = cur.fetchall()
for line in li:
for item in line:
print(item,end=' ')
print() conn.close() '''
王小丫 女 13888997011 66735 北京市
李莉 女 15808066055 675797 天津市
李星草 男 15912108090 3232099 昆明市
'''
8.1.2 Cursor 对象的更多相关文章
- 从FrameworkElement对象创建Cursor对象
原文:从FrameworkElement对象创建Cursor对象 Normal 0 false false false EN-US ZH-CN X-NONE MicrosoftInternetExpl ...
- android中cursor对象的使用
cursor对象是使用行来存储数据的,你要使用它获得数据,就必须知道每一列的数据名称以及他的数据类型才能获得对象数据 常见的方法: .close()关闭资源:记住,所有的资源对象使用完成后都要主动关闭 ...
- Android遍历SqlLite cursor对象:
//1. Cursor c =...; for(c.moveToFirst(); ! c.isAfterLast(); c.moveToNext()){ //c… } //2. Cursor curs ...
- [Android Pro] 完美Android Cursor使用例子(Android数据库操作)
reference to : http://www.ablanxue.com/prone_10575_1.html 完美 Android Cursor使用例子(Android数据库操作),Androi ...
- Android笔记——关于Cursor类的介绍
使用过 SQLite数据库的童鞋对 Cursor 应该不陌生,加深自己和大家对Android 中使用 Cursor 的理解. 关于 Cursor 在你理解和使用 Android Cursor 的时候你 ...
- python实践3:cursor() — 数据库连接操作
python 操作数据库,要安装一个Python和数据库交互的包MySQL-python-1.2.2.win32-py2.5.exe,然后我们就可以使用MySQLdb这个包进行数据库操作了. 操作步骤 ...
- Android sqlite cursor的遍历
查询并获得了cursor对象后,用while(corsor.moveToNext()){}遍历,当corsor.moveToNext()方法调用,如果发现没有对象,会返回false public Li ...
- Android Cursor空指针的问题
最近几天无聊自己动手写个音乐播放器,用到Cursor来取得数据库中音乐文件的信息,但是当用到Cursor的时候总是报空指针错误,后来发现是模拟器上没有音乐文件,使用Cursor的时候 ,若Cursor ...
- Android中Cursor(游标)类的概念和用法
使用过 SQLite 数据库的童鞋对 Cursor 应该不陌生,如果你是搞.net 开发你大可以把Cursor理解成 Ado.net 中的数据集合相当于dataReader.今天特地将它单独拿出来谈, ...
随机推荐
- shell 字符串拼接 获取自身文件名 日志记录
shell 字符串拼接 获取自身文件名 日志记录 [root@hadoop2 xiaole_chk_url]# sh a.sh123.loga.sh[root@hadoop2 xiaole_chk_ ...
- Linux 学习之路:认识shell和bash
一.shell 计算机硬件的直接控制者是操作系统的内核(kernel),因为内核的重要性,所以作为用户的我们是无法直接操作内核的,所以我们需要shell调用应用程序或者双击打开安装的应用软件与内核之 ...
- iOS开发基础:OC数组对象NSArray的常用方法
本文介绍了OC的数组对象的基本方法的使用: 因为OC的数组中存储的为对象类型,所以我们可以新建一个Person类,通过Person生成对象进行操作. 其中Person.h中的代码为: [objc] v ...
- TeeChart绘图控件 - 之三 - 提高绘图的效率 .
TeeChart是个很强大的控件,其绘图能力之强,其他控件难以比拟,但是有个问题就是他的绘图速度,其实TeeChart绘图速度还是很快的,只是大家一直都没正确运用其功能所以导致绘图速度慢的假象. 下面 ...
- eclipse高亮选中属性以及更改颜色
1.显示: 1.1.工具栏里有个黄色小笔的图标,点一下就好了 1.2.打开对话框windows->preference,在左上角输入mark Occurrencs 把右边都选 ...
- atcoder 076
日本人的比赛 C:如果两个数差了大于1无解,否则分类讨论 #include<bits/stdc++.h> using namespace std; typedef long long ll ...
- SQL使用IN参量不能超过1000的表现形式以及解决办法
如果出现这个错误说明你传的参量是超过了一千个值:列如,你拼接了1001个id: 如何解决那,我这里提供两种方法: 1.每1000条加一个or in 列: 原:select p.* from t_pre ...
- PCB 钻孔补偿那点事
没有优秀的个人,只有优秀的团队,在团队共同的协作下,PCB CAM自动化[net处理]与[钻孔处理] 第一阶段开发项完成了,,后续工作可以转向PCB规则引擎开发了.这里说说PCB工程钻孔补偿的那点事, ...
- java—容器学习笔记
一:迭代器 刚开始学容器,做了个简单的练习题.. import java.util.ArrayList; import java.util.Collection; import java.util.I ...
- discuz的cutstr函数
function cutstr($string, $length, $dot = ' ...') { if(strlen($string) <= $length) { return $strin ...