问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

使用python 中的MySQLdb模块读取数据,每次都要创建新的连接吗??

发布网友 发布时间:2022-04-29 22:04

我来回答

4个回答

懂视网 时间:2022-04-30 02:25

# -*- coding: utf-8 -*-     

#mysqldb    

import time, MySQLdb    

   

#连接    

conn=MySQLdb.connect(host="localhost",user="root",passwd="root",db="test",charset="utf8")  

cursor = conn.cursor()    元组的返回值

conn.cursor(cursorclass=MySQLdb.cursors.DictCursor) 字典的返回值


#删除表

sql = "drop table if exists user"

cursor.execute(sql)


#创建

sql = "create table if not exists user(name varchar(128) primary key, created int(10))"

cursor.execute(sql)


#写入    

sql = "insert into user(name,created) values(%s,%s)"   

param = ("aaa",int(time.time()))    

n = cursor.execute(sql,param)    

print ‘insert‘,n    

   

#写入多行    

sql = "insert into user(name,created) values(%s,%s)"   

param = (("bbb",int(time.time())), ("ccc",33), ("ddd",44) )

n = cursor.executemany(sql,param)    

print ‘insertmany‘,n    


#更新    

sql = "update user set name=%s where name=‘aaa‘"   

param = ("zzz")    

n = cursor.execute(sql,param)    

print ‘update‘,n    

   

#查询    

n = cursor.execute("select * from user")    

for row in cursor.fetchall():    

    print row

    for r in row:    

        print r    

   

#删除    

sql = "delete from user where name=%s"   

param =("bbb")    

n = cursor.execute(sql,param)    

print ‘delete‘,n    


#查询    

n = cursor.execute("select * from user")    

print cursor.fetchall()    


cursor.close()    

   

#提交    

conn.commit()

#关闭    

conn.close()   


python下的MySQLdb使用

标签:

热心网友 时间:2022-04-29 23:33

不用重新创建,DBUtil之类的有连接池的都是会保持一定数量的连接,不会每次都重新创建。另外,如果表里增加新的结果,肯定会看到。我这里测试是正常的:
import MySQLdb
import time

connMy = MySQLdb.connect(host='localhost',user='test',passwd='test',db='test')
while True:
cur = connMy.cursor()
cur.execute('select id from test order by id desc LIMIT 5')
ls = [row for row in cur]
print ls
cur.close()
time.sleep(10)
connMy.close()

运行之后:
[(5L,), (4L,), (3L,), (2L,), (1L,)]
[(5L,), (4L,), (3L,), (2L,), (1L,)]
[(5L,), (4L,), (3L,), (2L,), (1L,)]
[(6L,), (5L,), (4L,), (3L,), (2L,)]
[(7L,), (6L,), (5L,), (4L,), (3L,)]
...
新增加的记录都可以看到。你检查一下SQL语句有没有问题,还有插入新记录的时候是否提交了会话之类的。本身的Python程序是没有问题的追问key = 0
while True:
cur = connMy.cursor()
sql = 'select * from logisRecords where id > %s
param = (key)
row = cur.execute(sql , param)
print row
if row > 0:
ls = [row for row in cur]
key = int(ls[-1][0])
cur.close()
time.sleep(3)
connMy.close()
-------------------
第一次可以看到相应的行数,之后就全是0 ,新插入记录row也还是0

追答嗯,这样写的SQL和处理的方法对应的含义不是很准确,SQL的结果集没有排序,不知道ls[-1]是哪一个。如果是最大的,则下一次的查询都是要求查询大于这个id,在插入之前肯定不会又比最大等大的id,所以必然是row为0,至于插入之后,按说应该变成1,但是这里没变,就不太清楚了。如果不是最大的,则每次查询的结果就不一定了。
建议使用order by和limit的组合约束查询结果,看看会不会能看到变化。

热心网友 时间:2022-04-30 00:51

cur.execute(sql , param)的返回值不是查询结果,要用cur.fetchone()或cur.fetchall()获取结果。追问cur.execute(sql , param)
返回的是响应行数目
>>> print cur.execute('select id from table LIMIT 5')
5

热心网友 时间:2022-04-30 02:26

ls = [row for row in cur]
改成:

ls = [row for row in cur.fetchall]
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
Linux系统安装FTP服务器 Linux系统的网络文件共享 建筑的七盏明灯的内容简介 面向对象设计七大原则 简单说 交互设计七大定律 交互设计的“根”——七大定律 交互设计原则和理论2——七大定律 七大设计原则 附近的加油站有哪些 附近的加油站有哪些地方 为什么裤子,内裤的松紧带容易变松 MEIKO "サヨナラ・ヘヴン" 中文歌词 本兮所有的歌曲打包~ 现在什么歌好听一点?大神们帮帮忙 求几个最新的好听点的歌、现在(11月20日) 真珠美人鱼 治愈之歌 歌词 求日和漫画西游记之旅程的终点主题曲?? 求《走》的歌词 “最后的旅行”日语版歌名是什么? 歌词有有旅途终点是你在等我是什么歌? 光圈和广角镜头的最佳范围是多少? 个人诊所年营业额超过1500万,怎么交税? 个人的诊所需要纳税吗? 个体诊所需要交税吗?如何在税务局查看我们申报的金额需不需要交税? 中医诊所交税怎么交- 问一问 小诊所需要交那些税? 微信英雄杀特殊英雄怎么获得 英雄杀怎么给别人看我的牌? 微信英雄杀怎么得将令? 英雄杀微信账号怎么扫码登录? 鲨鱼裤腰头烫的+松紧是什么材质 企业QQ能群发手机短信吗? 格力空调解码方法是什么? 格力空调解码过一段时间又要解码是什么原因 格力空调新装为什么要解码 622188 1100030492738邮政卡号开户行是哪的 美的空调试机怎么解码? 空调红外遥控编码与普通家电的区别? 邮政卡号归属地查询6221885631010789293 622188是哪个地区银行的卡号后两位14是什么地区的? 空调遥控器的代码都是什么意思? 手机坏了如何用电脑把微信里的图弄出来? 电脑c盘变红满了怎么清理微信图片怎么清理 如何清理不需要的电脑微信聊天图片? 喜马拉雅电台放着放着没声音了 五线谱中音符上的Esus4,Dm,G/F,Em,A/#C,Bm7-5都是什么意思?请各位高手帮帮忙,小弟万分感谢。 保险业几次大的变革 牌号为45、65Mn,08F,Q235-A的钢属于哪类钢?试说明其符号及数字的意义,并举例 保险分为几种? lol解密者图标怎么获得