前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python里面的MySQLdb模块

python里面的MySQLdb模块

作者头像
AsiaYe
发布2019-11-06 17:10:03
5490
发布2019-11-06 17:10:03
举报
文章被收录于专栏:DBA随笔
python里面的MySQLdb模块 今天在写一个慢日志接口的时候,遇到了一个问题,就是我要得到一个慢日志sql的执行计划,需要用接口的形式去访问一个数据库,但是在拼凑数据库连接串的时候出现了问题,导致一直执行失败。其实连接的逻辑很简单,如下:

mysql -uuser_name -ppasswd -hlocalhost -Pport -D database -e "sql"

但是有些语句中包含了双引号或者单引号,导致这种连接方式一直出错,无奈的情况下,使用了一下python中的MySQLdb模块,最终解决了问题。

这里,先把最终的结果代码放在下面,然后再对结果进行解释:

代码语言:javascript
复制
# -*- coding: utf-8 -*-
#mysqldb
import MySQLdb
import argparse,json,string

parser = argparse.ArgumentParser(description='manual to this script')
parser.add_argument('--ipaddr', type=str, default = None)
parser.add_argument('--port', type=str, default = None)
parser.add_argument('--sqls', type=str, default = None)
parser.add_argument('--database', type=str, default = None)
args = parser.parse_args()
conn=MySQLdb.connect(host="127.0.0.1",user="dba_admin",passwd="passwd",db="yyy",port=int(args.port),charset="utf8")
cursor = conn.cursor() 


#查询    
sql_explain = args.sqls
n = cursor.execute(sql_explain)    
for row in cursor.fetchall():    
    for r in row:    
        print r    


#关闭    
conn.close() 

下面对上述代码进行解释,第3、4行代码是引入了python的两个包,MySQLdb和argparse,前者是连接mysql必要的模块,后者是传输参数需要的模块。

第6-11行是argparse模块的具体使用方法,其中7-10行是对应的参数,是通过这种方法进行传递的。当然,add_argument方法中还可以有其他一些属性,我们这里不再赘述,详细信息可以在python中搜索这个方法。

第12行代码是连接mysql库的,它的作用是连接MySQL服务,可以看到,需要填入很多必要参数,包含user、port、password、host、database、charset等等,我们可以看到,我们的port参数使用的值是args.port,是的,这就是我们调用自己自定义的参数的方法。

第13行是使用cursor()方法获取操作游标。

第17行是一个简单的赋值语句

第18行使用了execute函数,这个函数用来执行单条的sql语句,它的返回值为受影响的行数。

第19行使用了fetchall函数,它用来接收全部的返回结果行,如果想接收一条返回结果,则可以使用fetchone函数。

上面的脚本使用的方法如下:

代码语言:javascript
复制
[dba_mysql ~]$python mysql_conn.py --port=4306 --sqls="show tables";
a
b
mysql_slowlog_sql_history
slow
test
test_yyz
unstandard_ins
yeyz
[dba_mysql ~]$

我们在上面的脚本中只是用了select语句,如果要实现增删查改的功能,那么这个脚本还需要做一些丰富,大概写了下,贴在这里,以后有用到的话,可以拿过来改改就成:

代码语言:javascript
复制
# -*- coding: utf-8 -*-
#mysqldb
import time,MySQLdb
import argparse,json,string

parser = argparse.ArgumentParser(description='manual to this script')
parser.add_argument('--ipaddr', type=str, default = None)
parser.add_argument('--port', type=str, default = None)
parser.add_argument('--sqls', type=str, default = None)
parser.add_argument('--database', type=str, default = None)
args = parser.parse_args()
conn=MySQLdb.connect(host="127.0.0.1",user="dba_admin",passwd="DpzYAuwW9M13db0J",db="yyy",port=int(args.port),charset="utf8")
cursor = conn.cursor() 

#写入    
#sql = "insert into user(name,created) values(%s,%s)"   
#param = ("aaa",int(time.time()))    
#n = cursor.execute(sql,param)    
#print n


#更新    
#sql = "update user set name=%s where id=3"   
#param = ("bbb")    
#n = cursor.execute(sql,param)    
#print n    

#查询    
sql_explain = args.sqls
n = cursor.execute(sql_explain)    
for row in cursor.fetchall():    
    for r in row:    
        print r    

#删除    
#sql = "delete from user where name=%s"   
#param =("aaa")    
#n = cursor.execute(sql,param)    
#print n    
#cursor.close()    

#关闭    

今天就到这里吧,明儿还要早起维护阿里云,睡了睡了,DBA表示熬不动夜~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DBA随笔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档