mysq中cursor获取数据最大能够缓存多少数据

君,已阅读到文档的结尾了呢~~
如何从 MQL5 (MQL4) 访问 MySQL 数据库
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
如何从 MQL5 (MQL4) 访问 MySQL 数据库
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口MySQL中游标使用以及读取文本数据 - 湘江楚云 - 博客园
之前一直没有接触数据库的学习,只是本科时候修了一本数据库基本知识的课。当时只对C++感兴趣,天真的认为其它的课都没有用,数据库也是半懂不懂,胡乱就考试过了。现在学习大数据分析,接触了数据挖掘,才感觉到数据库是不可跨越的坎。直到现在才感觉到《操作系统》、《编译原理》、《计算机组成原理》等等课程的重要性。在浩瀚的知识面前,个人是非常渺小的。掌握了一种思想之后,任何事情都不困难,困难的是你是否真的静下心看一看帮助文档、认真的Google。静心、静气、认真、执着。
游标-cursor
学习了几天MySQL,谈一谈自己对游标的认识。
游标就类似于C++中的指针,用于指向查询结果。比如你查询后的的数据格式如下:
+------------+----------------------+------+------+------+-------------+----------+----------+------+---------+
| station_id | get_time
| PM25 | PM10 | NO2
| temperature | pressure | humidity | wind | weather |
+------------+----------------------+------+------+------+-------------+----------+----------+------+---------+
| 2/8/2013 9:00:00 PM
| 2/8/2013 10:00:00 PM |
| 2/9/2013 12:00:00 AM |
| 2/9/2013 2:00:00 AM
| 2/9/2013 3:00:00 AM
| 2/9/2013 4:00:00 AM
| 2/9/2013 5:00:00 AM
| 2/9/2013 6:00:00 AM
| 2/9/2013 7:00:00 AM
| 2/9/2013 8:00:00 AM
+------------+----------------------+------+------+------+-------------+----------+----------+------+---------+
你如果想逐条处理数据,那么必须要用到游标进行循环处理。
加载进来的数据是varchar格式,但是对于第二个属性&get_time&我们需要的格式是&datatime&,需要进行获取属性值并进行循环处理。
使用游标的步骤如下:
1.定义游标 declare 游标名 cursor for select语句
2.定义处理游标结束的变量&declare continue handler for not found &set 变量名=
3.打开游标 open 游标名
4.判断是否结束,如果不结束,则处理当前游标指向值;如果结束,则结束循环
5.关闭游标 close 游标名
注:游标一般是在存储过程(procedure)中调用,procedure类似于C++中的函数,里面封装了SQL语句,想要使用时,直接CALL &procedure_name&即可。游标(cursor)中若有使用的变量必须在声明cursor前把变量定义完。详细的代码设计如下:
CREATE DEFINER=`root`@`localhost` PROCEDURE `strToDate`()
-- 定义一个临时变量用于存储转换后的时间格式
declare temp datetime;
-- 定义字符串临时变量,存储查询后的每条内容
declare str varchar(150);
-- 是否结束的标识
declare flag int default
-- 定义游标
declare getTimeCursor cursor for select get_time from
-- 定义结束的标识
declare continue handler for not found
set flag =
-- 打开游标
open getTimeC
-- 开始循环处理
read_loop:loop
-- 把当前游标内容放到变量中
fetch getTimeCursor into str;
-- 如果结束标识为TRUE,则结束循环
if flag then
leave read_
-- 否则循环处理每个属性,调用字符串转换日期函数
set temp = (select str_to_date(str,'%c/%e/%Y %l:%i:%s %p'));
-- 把转换结果存储到新的表中insert into time_test values(temp);
-- 结束循环
-- 关闭游标
close getTimeC
-- 查询结果
select * from time_test limit 10;
其中,str_to_date()函数的功能是把string类型的数据转成date类型。查询后的结果为:
+---------------------+
| get_time
+---------------------+
| 2013-02-09 16:00:00 |
| 2013-02-08 21:00:00 |
| 2013-02-08 22:00:00 |
| 2013-02-09 00:00:00 |
| 2013-02-09 02:00:00 |
| 2013-02-09 03:00:00 |
| 2013-02-09 04:00:00 |
| 2013-02-09 05:00:00 |
| 2013-02-09 06:00:00 |
| 2013-02-09 07:00:00 |
+---------------------+
see,所有字符串都转换成了标准的时间格式。
MySQL load data控制
其实上面的问题完全可以利用另外一种方法完成,那就是在装载数据的时候进行格式控制。具体SQL代码如下:
drop table
create table if not exists traindata(
id int auto_increment primary key,
station_id varchar(10),
get_time datetime,
temperature int,
pressure int,
humidity int,
wind double,
weather int);
load data local
infile 'f:\\dataset\\beijing\\crawleddata.txt'
into table traindata
fields terminated by ','
(station_id, @var_time, PM25, PM10, NO2, temperature, pressure, humidity, wind, weather)
set get_time = str_to_date(@var_time, '%c/%e/%Y %l:%i:%s %p');
select * from traindata limit 10;
加载进数据库后,具体数据格式如下:
+----+------------+---------------------+------+------+------+-------------+----------+----------+------+---------+
| id | station_id | get_time
| PM25 | PM10 | NO2
| temperature | pressure | humidity | wind | weather |
+----+------------+---------------------+------+------+------+-------------+----------+----------+------+---------+
1001 | 2013-02-08 21:00:00 |
1001 | 2013-02-08 22:00:00 |
1001 | 2013-02-09 00:00:00 |
1001 | 2013-02-09 02:00:00 |
1001 | 2013-02-09 03:00:00 |
1001 | 2013-02-09 04:00:00 |
1001 | 2013-02-09 05:00:00 |
1001 | 2013-02-09 06:00:00 |
1001 | 2013-02-09 07:00:00 |
1001 | 2013-02-09 08:00:00 |
+----+------------+---------------------+------+------+------+-------------+----------+----------+------+---------+
see,标准的数据格式。
原创内容,转载请注明出处。/chuantingSDU/p/4243990.html
联系方式:chuanting.当前位置:&&编程技术>
python数据库操作常用功能使用详解(创建表/插入数据/获取数据)
&&&&来源:&互联网& 发布时间:
&&&&本文导语:&
实例1、取得MYSQL版本
代码如下:# -*- coding: UTF-8 -*-#安装MYSQL DB for pythonimport MySQLdb as mdbcon = Nonetry:
#连接mysql的方法:connect('ip','user','password','dbname')
con = mdb.connect('localhost', 'root',
'root', 'test');
#所有的查询...
实例1、取得MYSQL版本
代码如下:# -*- coding: UTF-8 -*-#安装MYSQL DB for pythonimport MySQLdb as mdbcon = Nonetry:
#连接mysql的方法:connect('ip','user','password','dbname')
con = mdb.connect('localhost', 'root',
'root', 'test');
#所有的查询,都在连接con的一个模块cursor上面运行的
cur = con.cursor()
#执行一个查询
cur.execute("SELECT VERSION()")
#取得上个查询的结果,是单个结果
data = cur.fetchone()
print "Database version : %s " % datafinally:
#无论如何,连接记得关闭
con.close()
执行结果:Database version : 5.5.25
实例2、创建一个表并且插入数据
代码如下:# -*- coding: UTF-8 -*-import MySQLdb as mdbimport sys#将con设定为全局连接con = mdb.connect('localhost', 'root', 'root', 'test');with con:
#获取连接的cursor,只有获取了cursor,我们才能进行各种操作
cur = con.cursor()
#创建一个数据表 writers(id,name)
cur.execute("CREATE TABLE IF NOT EXISTS
Writers(Id INT PRIMARY KEY AUTO_INCREMENT, Name VARCHAR(25))")
#以下插入了5条数据
cur.execute("INSERT INTO Writers(Name) VALUES('Jack London')")
cur.execute("INSERT INTO Writers(Name) VALUES('Honore de Balzac')")
cur.execute("INSERT INTO Writers(Name) VALUES('Lion Feuchtwanger')")
cur.execute("INSERT INTO Writers(Name) VALUES('Emile Zola')")
cur.execute("INSERT INTO Writers(Name) VALUES('Truman Capote')")
实例3、python使用slect获取mysql的数据并遍历
代码如下:# -*- coding: UTF-8 -*-import MySQLdb as mdbimport sys#连接mysql,获取连接的对象con = mdb.connect('localhost', 'root', 'root', 'test');with con:
#仍然是,第一步要获取连接的cursor对象,用于执行查询
cur = con.cursor()
#类似于其他语言的query函数,execute是python中的执行查询函数
cur.execute("SELECT * FROM Writers")
#使用fetchall函数,将结果集(多维元组)存入rows里面
rows = cur.fetchall()
#依次遍历结果集,发现每个元素,就是表中的一条记录,用一个元组来显示
for row in rows:
代码如下:执行结果:(1L, ‘Jack London')(2L, ‘Honore de Balzac')(3L, ‘Lion Feuchtwanger')(4L, ‘Emile Zola')(5L, ‘Truman Capote')
实例4、使用字典cursor取得结果集(可以使用表字段名字访问值)
代码如下:# -*- coding: UTF-8 -*-# 来源:疯狂的蚂蚁的博客总结整理import MySQLdb as mdbimport sys#获得mysql查询的链接对象con = mdb.connect('localhost', 'root', 'root', 'test')with con:
#获取连接上的字典cursor,注意获取的方法,
#每一个cursor其实都是cursor的子类
cur = con.cursor(mdb.cursors.DictCursor)
#执行语句不变
cur.execute("SELECT * FROM Writers")
#获取数据方法不变
rows = cur.fetchall()
#遍历数据也不变(比上一个更直接一点)
for row in rows:
#这里,可以使用键值对的方法,由键名字来获取数据
print "%s %s" % (row["Id"], row["Name"])
实例5、获取单个表的字段名和信息的方法
代码如下:# -*- coding: UTF-8 -*-# 来源:疯狂的蚂蚁的博客总结整理import MySQLdb as mdbimport sys#获取数据库的链接对象con = mdb.connect('localhost', 'root', 'root', 'test')with con:
#获取普通的查询cursor
cur = con.cursor()
cur.execute("SELECT * FROM Writers")
rows = cur.fetchall()
#获取连接对象的描述信息
desc = cur.description
print 'cur.description:',desc
#打印表头,就是字段名字
print "%s %3s" % (desc[0][0], desc[1][0])
for row in rows:
print "%2s %3s" % row
代码如下:运行结果: cur.description: ((‘Id', 3, 1, 11, 11, 0, 0), (‘Name', 253, 17, 25, 25, 0, 1))Id Name1 Jack London2 Honore de Balzac3 Lion Feuchtwanger4 Emile Zola5 Truman Capote
实例6、使用Prepared statements执行查询(更安全方便)
代码如下:# -*- coding: UTF-8 -*-# 来源:疯狂的蚂蚁的博客总结整理import MySQLdb as mdbimport syscon = mdb.connect('localhost', 'root', 'root', 'test')with con:
cur = con.cursor()
#我们看到,这里可以通过写一个可以组装的sql语句来进行
cur.execute("UPDATE Writers SET Name = %s WHERE Id = %s",
("Guy de Maupasant", "4"))
#使用cur.rowcount获取影响了多少行
print "Number of rows updated: %d" % cur.rowcount结果: 代码如下:Number of rows updated: 1
您可能感兴趣的文章:
本站()旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。本站()站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
相关文章推荐
特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!
(C)2012-,E-mail:www_169it_(请将#改为@)一、简单案例:
&DECLARE loc_username char(100);
&DECLARE loc_password char(10);
&DECLARE done int DEFAULT 1 ;
&DECLARE mycur CURSOR for SELECT username , password from user limit 0 ,10 &;
&DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 0 ;
& read_loop: LOOP
& & FETCH mycur INTO loc_username , loc_
& & if done=0 THEN
& & &LEAVE read_
& & SELECT loc_username , loc_
二、说明:
& & &1、声明多个变量,对应要取出的多列数据。
& & DECLARE loc_username char(100);
& & & & &DECLARE loc_password char(10);
2、声明游标控制变量,用来判断游标是否结束以跳出循环。
& & DECLARE done int DEFAULT 1 ;
3、声明游标(取出多列数据),为游标控制变量赋值。
& & DECLARE mycur CURSOR for SELECT username , password from user limit 0 ,10 &;
& & & & &DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 0 ;
4、打开游标。
5、使用loop循环遍历游标,取出每行数据,进行操作。
& &read_loop: LOOP
FETCH mycur INTO loc_username , loc_
if done=0 THEN
LEAVE read_
SELECT loc_username , loc_
6、关闭游标。
本文已收录于以下专栏:
相关文章推荐
问题的描述如下:给定数据库中的两列,每个列内的所有记录可以视为一个集合,如何求这两个集合的交集,差集等。示例:table1中字段firstnametomkevinjohnstevenmarryanth...
delimiter $
create PROCEDURE phoneDeal()
id varchar(64);
DECLARE ...
本示例通过 while...end while 循环控制游标来实现插入表记录。DROP PROCEDURE IF exists pro_initCategoryForTradingEcre...
给定A, B两个整数,不使用除法和取模运算,求A/B的商和余数。
最基本的算法是,从小到大遍历:
for (i = 2 to A -1)
if (i * B > A)...
K-means聚类算法是一种非层次聚类算法,在最小误差的基础上将数据划分了特定的类,类间利用距离作为相似度指标,两个向量之间的距离越小,其相似度就越高。程序读取全国省市经纬度坐标,然后根据经纬度坐标进...
本人最近在研究Radon变换,在查阅了各种资料之后在此写下个人的理解,希望与各位牛牛进行交流共同进步,也使得理解更加深刻些。
Radon变换的本质是将原来的函数做了一个空间转换,即,将原来的XY平...
由于csdn贴图不方便,并且不能上传附件,我把原文上传到了资源空间CT图像重建技术
计算机层析成像(Computed Tomography,CT)是通过对物体进行不同角度的射线投影测量而...
Matlab绘图强大的绘图功能是Matlab的特点之一,Matlab提供了一系列的绘图函数,用户不需要过多的考虑绘图的细节,只需要给出一些基本参数就能得到所需图形,这类函数称为高层绘图函数。此外,Ma...
查找目录下的所有文件中是否含有某个字符串
find .|xargs grep -ri "IBM"
查找目录下的所有文件中是否含有某个字符串,并且只打印出文件名
find .|xargs g...
/hi9394/blog/item/0d492b8bfdfc7aa9.html
图像投影,就是说将图像在某一方向上做线性积分(或理解为累...
他的最新文章
讲师:李江龙
讲师:司徒正美
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)

我要回帖

更多关于 遍历cursor 删除数据 的文章

 

随机推荐