mysql -uuser_name -ppasswd -hlocalhost -Pport -D database -e "sql"
但是有些语句中包含了双引号或者单引号,导致这种连接方式一直出错,无奈的情况下,使用了一下python中的MySQLdb模块,最终解决了问题。
这里,先把最终的结果代码放在下面,然后再对结果进行解释:
# -*- 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函数。
上面的脚本使用的方法如下:
[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语句,如果要实现增删查改的功能,那么这个脚本还需要做一些丰富,大概写了下,贴在这里,以后有用到的话,可以拿过来改改就成:
# -*- 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表示熬不动夜~