Python-利用model,按照模版将来源表拼凑成规定SQL

简介: 最近项目组来了活,有一堆不同业务域的表,需要我们按照表的字段内容将表分到不同的属性域中,说简单点就是把可以用的表unionall起来,听起来很简单,就拿优惠券发送表来说,八十个字段的模版表,有八个来源表,每个来源表假如是五十个字段,需要的工作量多大,就不称述了。

之前modelscope搞活动的时候,上网页对这里面的模型有了了解,但好奇为主,使用嘛,当时确实没有使用场景。

modelscope网址:https://modelscope.cn/models

里面有各种比较常见的模型,最近项目组来了活,有一堆不同业务域的表,需要我们按照表的字段内容将表分到不同的属性域中,说简单点就是把可以用的表unionall起来,听起来很简单,就拿优惠券发送表来说,八十个字段的模版表,有八个来源表,每个来源表假如是五十个字段,需要的工作量多大,就不称述了。

所以我就琢磨着用模型中的一个模型来匹配注释,本来想用句子相似度的模型,但考虑到时间问题和入参仅为两个,选为语义相关性的模型。

实际效果很一般,因为在通用领域使用的模型,在垂直领域的效果不尽如人意,但是他确实帮我筛掉了大部分不需要关注的字段。

代码从上往下,咋们首先要给自己的电脑安装需要的依赖。

  1. pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple "modelscope[nlp]" -f https://modelscope.oss-cn-beijing.aliyuncs.com/releases/repo.html
  2. pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade tensorflow

这是我最后导入依赖的模版,然后我们需要有两个文件,一个文件是我们的模版sql,一个是我们所有表的select语句,需要注意我定的sql模版必须是字段名+逗号+--+字段注释的样子。

然后我们写一个方法,清理掉sql中的select或者SELECT字符。

然后我会将一个表的字段名称和字段注释打成一个数组,并且会将表的表名给写入到一个单独的数组中,为了不将模版的表名也添加进去,所以可以用带test字符的表名。

下一步,我会将列名作为dic的key,列注释作为dic的键,只是这个办法着实有点笨,本来应该是判断是否包含中文等方式来判断,但是为了简单,我直接按步数判断,这也就要求待处理的sql中,每一个sql列都需要有注释。

此外,为了在写入的时候,用value获得对象的key,需要额外写个方法,这是为了写新的select语句的时候不至于拿不到字段名,好吧,我又用了一个麻烦的办法,我道歉,但我不想改,毕竟我自己用,比之前快几倍就够了。

然后是一段又臭又长,我还将用的模型和逻辑放一块的烂代码,它还会创建两个文件,一个是新的sql,也就是tmp数据的文件,一个是log的文件,里面是每一个表的字段和字段注释,表名,每一个字段和模版字段的相似度值是多少。

# 字段注释和分数的日志文件f=open("/Users/mac/vscode/log.txt", "a")
t=open("/Users/mac/vscode/tmp数据.sql", "a")
model_id='damo/nlp_rom_passage-ranking_chinese-base'model=Model.from_pretrained(model_id)
tokenizer=PassageRankingPreprocessor(model.model_dir)
pipeline_ins=pipeline(task=Tasks.passage_ranking,
model=model, preprocessor=tokenizer)
mb_list=get_new_array(read_sql(mb_path)[0])
drity_all_list=read_sql(dri_path)
# print(drity_all_list)print("开始执行")
foriinrange(len(drity_all_list)):
end_result="select "drity_list=get_new_array(drity_all_list[i])
f.write(str(get_new_array(drity_all_list[i]))+"\n")
f.write(str(table_name[i])+"\n")
sentences_to_compare=list()
mode_list= []
source_sentenc=""# 获得表中所有字段forold_k, old_vindrity_list.items():
sentences_to_compare.append(old_v)
# 按照模版表获得语义相近的字段,语义相似度从0-1formb_k, mb_vinmb_list.items():
inputs= {
'source_sentence': [mb_v],
'sentences_to_compare': sentences_to_compare        }
f.write(str(mb_v)+"\n")
# print(mb_v)result_mobel=pipeline_ins(input=inputs)
mode_list=result_mobel['scores']
zip_dic=dict(zip(sentences_to_compare, mode_list))
# 对分数和注释名称打包的字典值按照分数进行倒排vi1_list=sorted(zip_dic.items(), key=itemgetter(1), reverse=True)
f.write(str(vi1_list)+"\n")
dic_v=str(list(vi1_list[0])[0])
dic_k=str(getDictKey_1(drity_list, dic_v)[0])
mb_k=str(getDictKey_1(mb_list, str(mb_v))[0])
# 比0.5小的默认为无意义数据iflist(vi1_list[0])[1] >0.5:
# 移除已经匹配的模板字段iflist(vi1_list[0])[1] >0.8:
sentences_to_compare.remove(dic_v)
end_result=end_result+ \
"CAST("+dic_k+" AS STRING) AS "+str(mb_k) + \
",--"+str(mb_v)+"->"+dic_v+"\n"else:
end_result=end_result+ \
"CAST(null AS STRING) AS "+str(mb_k)+" ,--—"+str(mb_v) + \
"-->"+str(vi1_list[0][0])+"\n"t.write(end_result+"from "+table_name[i]+"\n union all \n")
print("完成度"+("###"*i)+str(i/len(drity_all_list)*100))
f.flush()
t.flush()
f.close()
t.close()
目录
相关文章
|
19天前
|
SQL 存储 数据挖掘
使用Python和PDFPlumber进行简历筛选:以SQL技能为例
本文介绍了一种使用Python和`pdfplumber`库自动筛选简历的方法,特别是针对包含“SQL”技能的简历。通过环境准备、代码解析等步骤,实现从指定文件夹中筛选出含有“SQL”关键词的简历,并将其移动到新的文件夹中,提高招聘效率。
37 8
使用Python和PDFPlumber进行简历筛选:以SQL技能为例
|
1月前
|
SQL 数据挖掘 Python
数据分析编程:SQL,Python or SPL?
数据分析编程用什么,SQL、python or SPL?话不多说,直接上代码,对比明显,明眼人一看就明了:本案例涵盖五个数据分析任务:1) 计算用户会话次数;2) 球员连续得分分析;3) 连续三天活跃用户数统计;4) 新用户次日留存率计算;5) 股价涨跌幅分析。每个任务基于相应数据表进行处理和计算。
|
2月前
|
SQL 机器学习/深度学习 数据库
SQL与Python集成:数据库操作无缝衔接
在开始之前,确保你已经安装了必要的Python库,如`sqlite3`(用于SQLite数据库)或`psycopg2`(用于PostgreSQL数据库)。这些库提供了Python与SQL数据库之间的接口。
|
3月前
|
SQL 安全 数据库
惊!Python Web安全黑洞大曝光:SQL注入、XSS、CSRF,你中招了吗?
在数字化时代,Web应用的安全性至关重要。许多Python开发者在追求功能时,常忽视SQL注入、XSS和CSRF等安全威胁。本文将深入剖析这些风险并提供最佳实践:使用参数化查询预防SQL注入;通过HTML转义阻止XSS攻击;在表单中加入CSRF令牌增强安全性。遵循这些方法,可有效提升Web应用的安全防护水平,保护用户数据与隐私。安全需持续关注与改进,每个细节都至关重要。
143 5
|
3月前
|
SQL 安全 Go
SQL注入不可怕,XSS也不难防!Python Web安全进阶教程,让你安心做开发!
在Web开发中,安全至关重要,尤其要警惕SQL注入和XSS攻击。SQL注入通过在数据库查询中插入恶意代码来窃取或篡改数据,而XSS攻击则通过注入恶意脚本来窃取用户敏感信息。本文将带你深入了解这两种威胁,并提供Python实战技巧,包括使用参数化查询和ORM框架防御SQL注入,以及利用模板引擎自动转义和内容安全策略(CSP)防范XSS攻击。通过掌握这些方法,你将能够更加自信地应对Web安全挑战,确保应用程序的安全性。
105 3
|
3月前
|
SQL 安全 数据库
深度揭秘:Python Web安全攻防战,SQL注入、XSS、CSRF一网打尽!
在Web开发领域,Python虽强大灵活,却也面临着SQL注入、XSS与CSRF等安全威胁。本文将剖析这些常见攻击手段,并提供示例代码,展示如何利用参数化查询、HTML转义及CSRF令牌等技术构建坚固防线,确保Python Web应用的安全性。安全之路永无止境,唯有不断改进方能应对挑战。
86 5
|
2月前
|
SQL 安全 数据库
Python防止SQL注入攻击的方法
Python防止SQL注入攻击的方法
114 0
|
3月前
|
SQL 安全 数据安全/隐私保护
Python Web安全大挑战:面对SQL注入、XSS、CSRF,你准备好了吗?
在构建Python Web应用时,安全性至关重要。本文通过三个真实案例,探讨了如何防范SQL注入、XSS和CSRF攻击。首先,通过参数化查询替代字符串拼接,防止SQL注入;其次,利用HTML转义机制,避免XSS攻击;最后,采用CSRF令牌验证,保护用户免受CSRF攻击。这些策略能显著增强应用的安全性,帮助开发者应对复杂的网络威胁。安全是一个持续的过程,需不断学习新知识以抵御不断变化的威胁。
132 1
|
3月前
|
SQL 安全 数据库
Python Web开发者必看!SQL注入、XSS、CSRF全面解析,守护你的网站安全!
在Python Web开发中,构建安全应用至关重要。本文通过问答形式,详细解析了三种常见Web安全威胁——SQL注入、XSS和CSRF,并提供了实用的防御策略及示例代码。针对SQL注入,建议使用参数化查询;对于XSS,需对输出进行HTML编码;而防范CSRF,则应利用CSRF令牌。通过这些措施,帮助开发者有效提升应用安全性,确保网站稳定运行。
62 1
|
3月前
|
SQL 安全 数据库
深度揭秘:Python Web安全攻防战,SQL注入、XSS、CSRF一网打尽!
在Web开发领域,Python虽强大灵活,但安全挑战不容小觑。本文剖析Python Web应用中的三大安全威胁:SQL注入、XSS及CSRF,并提供防御策略。通过示例代码展示如何利用参数化查询、HTML转义与CSRF令牌构建安全防线,助您打造更安全的应用。安全是一场持久战,需不断改进优化。
58 3