概述
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、python脚本
- 1.代码
- 2.不足
- 3.效果
- 总结
前言
leetcode刷题测试用例不能在本地形成表格,不方便自己写的sql进行测试,不能获得阶段性sql结果,因而写了一个小脚本,将leetcode中的测试用例自动生成测试表。
考虑到用户体验,发布最新的修改版,解决问题:
1、null值的插入问题
2、int数据类型表字段转化
3、浮点型数据类型表字段转化转化
4、修改数据类型,了解了json与python之间的转化
一、python脚本
1.代码
import json
import pymysql
import re
# 复制粘贴输入leetcode测试用例
content = input("请输入:")
# 将json格式转化成python格式
dict1 = json.loads(content)
# 阶段数据储存,临时变量
dict2 = []
list1 = []
# 获取数据库名,表明
for i in dict1.keys():
database_name = i
break
# 获取表字段名,行数据
for i in dict1.values():
dict2.append(i)
# 获取表明
for j in dict2[0].keys():
list1.append(j)
table = list1[0]
# 获取字段名
for i in dict2[0].values():
list3 = i
# 获取行数据
for j in dict2[1].values():
dict4 = j
# 定义数据库引擎
config = {'host': '127.0.0.1', # 默认127.0.0.1
'user': 'root', # 用户名
'password': '123456', # 密码
'port': 3306, # 端口,默认为3306
'database': 'test', # 数据库名称
'charset': 'utf8' # 字符编码
}
# 判断是否存在用例数据库,临时变量
a = 1
# 获得数据库连接对象
con = pymysql.connect(**config)
# 先删后建
sql1 = f'drop database {database_name};'
sql2 = f"create database {database_name} charset='utf8'"
# 获取数据库游标对象
cursor = con.cursor()
# 执行删库
try:
cursor.execute(sql1)
con.commit()
except:
# 执行建库
cursor.execute(sql2)
con.commit()
else:
# 执行建库
cursor.execute(sql2)
con.commit()
# 启用用例数据库
sql = 'use headers'
cursor.execute(sql)
con.commit()
# 建表和临时列
sql3 = "create table {0} (`linshi` int(10));".format(table)
cursor.execute(sql3)
con.commit()
print('创建成功')
# 添加字段列名,循环建立所有列名
for i in list3:
sql4 = f"alter table {table} add {i} varchar(20);"
cursor.execute(sql4)
# 插入数据,循环更改列类型
for j in dict4:
for index, world in enumerate(j):
try:
# 判断是否为纯数字
str1 = str(world)
if str1.isdigit():
# 更改纯数字为int类型
sql5 = f"alter table {table} modify column {list3[index]} int;"
cursor.execute(sql5)
# 判断是否是小数,更改为decimal类型
elif re.findall("[0-9]+.[0-9]+$", str1):
sql5 = f"alter table {table} modify column {list3[index]} decimal ;"
cursor.execute(sql5)
# 判断是否为日期,更改为datetime类型
elif re.findall("[0-9]{4}-[0-9]{2}-[0-9]{2}", world):
sql5 = f"alter table {table} modify column {list3[index]} datetime;"
cursor.execute(sql5)
except:
continue
else:
continue
# 删除临时列
sql6 = f"alter table {table} drop column `linshi`;"
cursor.execute(sql6)
con.commit()
# 循环插入数据
for i in dict4:
# 将数据转化成json格式,主要针对null值,在python中为none
data = json.dumps(i)
# data为str类型,直接将[]转化成()
data1 = data.replace('[', '(')
data2 = data1.replace(']', ')')
sql7 = f"insert into {table} values {data2};"
cursor.execute(sql7)
con.commit()
# 关闭数据库连接对象
con.close()
2.不足
建表数据类型,只对时间,int,和浮点的字段进行了处理,其余一律设置成了varchar(20),有长度需求可以更改;
3.效果
leetcode用例:
{“headers”: {“Weather”: [“id”, “recordDate”, “temperature”]}, “rows”: {“Weather”: [[1, “2015-01-01”, 10], [2, “2015-01-02”, 25], [3, “2015-01-03”, 20], [4, “2015-01-04”, 30]]}}
运行前:
运行中:
运行后:
总结
这里只针对mysql数据库,其他数据库可更改数据库连接驱动。
时光如水,人生逆旅矣。
最后
以上就是鲤鱼百合为你收集整理的leetcode测试用例转化数据库表前言一、python脚本总结的全部内容,希望文章能够帮你解决leetcode测试用例转化数据库表前言一、python脚本总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复