如何将Bash的MySQL查询导出逻辑转为Python脚本?
问题描述
原本在Bash中使用以下命令从test_cases表查询framework为Java的class和testcase列数据,导出到testcases文件:
echo "select class, testcase from test_cases where framework = 'Java';" | mysql -h vm.dev.midasplayer.com --ssl-mode=DISABLED -u ${DB_USER} -p${DB_PASSWORD} tabletest > testcases
已通过Python的mysql.connector成功连接数据库,但不知道如何执行查询并将结果写入文件,现有连接代码如下:
import mysql.connector mydb = mysql.connector.connect( host="vm.dev.midasplayer.com", user="username", password="password" ) print(mydb)
解决方案
按以下步骤补充代码即可实现需求:
指定目标数据库:
原Bash命令指定了tabletest数据库,同时需要关闭SSL验证,修改连接代码添加对应参数:mydb = mysql.connector.connect( host="vm.dev.midasplayer.com", user="username", password="password", database="tabletest", # 指定要操作的数据库 ssl_disabled=True # 对应Bash中的--ssl-mode=DISABLED )创建游标并执行查询:
通过游标执行SQL语句并获取结果:mycursor = mydb.cursor() sql = "SELECT class, testcase FROM test_cases WHERE framework = 'Java';" mycursor.execute(sql)获取结果并写入文件:
先获取字段名作为表头,再将查询结果按制表符分隔的格式写入文件(和Bash命令输出格式保持一致):# 获取字段名列表 column_names = [desc[0] for desc in mycursor.description] # 获取所有查询结果 results = mycursor.fetchall() # 写入文件 with open("testcases", "w") as f: # 写入表头 f.write("\t".join(column_names) + "\n") # 逐行写入数据 for row in results: f.write("\t".join(str(item) for item in row) + "\n")关闭资源:
操作完成后关闭游标和数据库连接:mycursor.close() mydb.close()
完整可运行代码:
import mysql.connector # 连接数据库 mydb = mysql.connector.connect( host="vm.dev.midasplayer.com", user="username", password="password", database="tabletest", ssl_disabled=True ) # 创建游标并执行查询 mycursor = mydb.cursor() sql = "SELECT class, testcase FROM test_cases WHERE framework = 'Java';" mycursor.execute(sql) # 获取字段名和查询结果 column_names = [desc[0] for desc in mycursor.description] results = mycursor.fetchall() # 写入结果到文件 with open("testcases", "w") as f: f.write("\t".join(column_names) + "\n") for row in results: f.write("\t".join(str(item) for item in row) + "\n") # 关闭资源 mycursor.close() mydb.close()
内容的提问来源于stack exchange,提问作者user21050760
相关产品推荐
相关产品推荐

