最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

【世界新视野】Python学习之五_字符串处理生成查询SQL

来源:博客园


(资料图片仅供参考)

Python学习之五_字符串处理生成查询SQL

前言

昨天想给同事讲解一下获取查询部分表核心列信息的SQL方法也写好了一个简单文档. 但是感觉不是很优雅. 最近两三天晚上一直在学习Python. 想将昨天的文档处理成一个工具的方式.将查询SQL展示出来. 然后再由同事手工检查确认. 增加时间范围等处理理论上这样能够加快处理速度. 避免过多的拼接过程. 

Python的处理过程

添加三个脚本文件dbconnection.py 拼接数据库连接字符串使用gettablesql.py  查询数据库, 获取表SQL使用getsql.py       接收输入的表名, 打印这个表核心列查询SQL需要的module主要有sys,configparser,jaydebeapi方法比较简单, 本着自学的态度进行学习与使用. 

dbconnection.py

# coding=utf-8import jaydebeapiimport configparserconfig = configparser.ConfigParser()config.read("dbconnection.ini",encoding="utf-8")def getconn(dbinstance) :    jdbcString = config.get(dbinstance,"jdbcString")    driverPath = config.get(dbinstance,"driverPath")    urlString = config.get(dbinstance,"urlString")    userName = config.get(dbinstance,"userName")    passWord = config.get(dbinstance,"passWord")    conn = jaydebeapi.connect(jdbcString,urlString,[userName,passWord],driverPath)    return conn

gettablesql.py

import dbconnectionimport configparserdef gettablesql (configfile,dbinfo,tablename) :    config = configparser.ConfigParser()    config.read(configfile,encoding="utf-8")    conn = dbconnection.getconn(dbinfo)    getsql = ("""    SELECT            LISTAGG ( COLUMN_NAME, ",")        FROM            user_tab_cols         WHERE            table_name = upper( """"    + str(tablename) +    """" )             AND column_name NOT LIKE "%TIME%"             AND column_name NOT LIKE "%_PT"             AND column_name NOT LIKE "%_CHT"             AND column_name NOT LIKE "%_ES"             AND column_name NOT LIKE "%_EN"             AND column_name NOT LIKE "%DATE%"         ORDER BY            COLUMN_NAME ASC     """)    cur = conn.cursor()    cur.execute(getsql)    columninfo = cur.fetchall()    getdatasql=("select " + str(columninfo)[3:-4] + " from  " + str(tablename) + " order by 1 asc" )    return getdatasql    cur.close()

调用函数 getsql.py

import gettablesqlimport systablename = sys.argv[1]sql = gettablesql.gettablesql("dbconnection.ini","bf",tablename)print(sql)

处理的一些说明

1. """ 表示多行字符串. 2. 字符串建议使用 () 小括号括起来, 便于处理3. 字符串可以使用 + 的方式进行拼接. 建议可以进行str(xxx)的方式进行显示转换. 4. str(xxxx)[3:-4] 表示删除前面三个,最后四个字符.    这里正好将 oracle listagg 出来的tuple记过的前面三个多语的福浩删除掉了5. def xxxx : 进行定义函数, return 到被调用函数就可以了. 

字符串处理的一些加深学习

之前一直使用shell 进行字符串的处理自己也记录了非常多的shell 处理工具的命令和方式.最近学习python 感觉更简洁和方便. 需要多学习, 需要保持学习的能力学习可以使你有离开的能力, 只有这样才不会总被人欺负. 本文后面的大部分学习自:https://baijiahao.baidu.com/s?id=1738413163267646541

1. 判断输入字符串的类型

zhaobsh = input("请输入: " )print(zhaobsh.isalpha())使用pycharm 可以提示出具体的判断函数isasciiisspaceisupperislower

2. 字符串拼接

print("-".join(zhaobsh))  # 用来指定拼接符号,拼接出一个字符串,效率比+高print(zhaobsh.center(100, "*"))  # 字符串居中,左右填充指定内容print(zhaobsh.ljust(50, "*"))  # 返回一个原字符串左对齐,并使用空格填充至指定长度的新字符串。                                 如果指定的长度小于原字符串的长度则返回原字符串。print(zhaobsh.rjust(50, "*"))  # 它将原字符串右对齐,并使用空格填充至指定长度,并返回新的字符串。                                 如果指定的长度小于原字符串长度,则直接返回原字符串。print(zhaobsh.zfill(50))  # 返回指定长度的字符串,原字符串右对齐,前面填充0。

3. 查找

print(str.count("p"))  # 指定内容,在原str中出现了多少次print(str.find("pip"))  # 包含pip,则返回开始的索引值,否则返回-1。print(str.index("pip"))  # 包含pip,则返回开始的索引值,否则返回Exception。print(str.rfind(" "))  # 返回参数字符串在字符串中最后一次出现的位置。没有查询到则返回-1.print(str.rindex(" "))  # 返回参数字符串在字符串中最后一次出现的位置。没有查询到则返回Exception.

4.分隔和替换

print(str.replace(" ", "-"))  # 替换操作,str.replace()函数并不对原有的字符串进行改变。print(str.partition(" "))  # 如果字符串包含指定的分隔符,则返回一个3元的元组,第一个为分隔符左边的子串,第二个为分隔符本身,第三个为分隔符右边的子串。print(str.rpartition(" "))  # 类似于 partition() 方法,只是该方法是从目标字符串的末尾也就是右边开始搜索分割符。print(str.rsplit(" "))  # 如果给出了 maxsplit,则最多进行 maxsplit 次拆分,从 最右边 开始。print(str.split(" "))  # 分割字符串print(str.splitlines())  # 按照行界符("\r", "\r\n", \n"等)分隔,返回一个包含各行作为元素的列表,默认不包含行界符。print(str.lstrip("p"))  # 删除从开头开始指定的字符串,然后返回结果字符串。注意:只能从开头开始print(str.rstrip("p"))  # 删除 string 字符串末尾的指定字符,默认为空白符,包括空格、换行符、回车符、制表符。print(str.strip())  # 删除前后的指定字符,默认是空格

5.大小写操作

print(str.capitalize())  # 第一个字母大写,对中文无效print(str.lower())  # 字母转为小写,只对英语有效print(str.casefold())  # 字母转为小写,所有语言都有效,例如:德语print(str.upper())  # 字母全部转为大写,英语有效print(str.swapcase())  # 将字符串中的英文字母大小写互换,并返回修改后的字符串。print(str.title())  # 将字符串中的每个单词首字母大写,其余字母小写,并返回新的字符串。

6. 判断内容

print(str.startswith("pip"))  # 判断是否以pip为开头print(str.endswith("office"))  # 判断str是否以office结尾print(str.isalnum())  # 如果 string 至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 Falseprint(str.isalpha())  # 如果 string 至少有一个字符并且所有字符都是字母则返回 True,否则返回 Falseprint(str.isascii())  # 如果字符串为空或字符串中的所有字符都是 ASCII,则返回 True,否则返回 False。print(str.isdecimal())  # 如果字符串中的所有字符都是十进制字符,则返回Trueprint(str.isdigit())  # isdigit函数检测字符串中是否只包含数字字符。若全部是由数字字符组成的字符串,则返回True,否则返回False。isdigit函数没有参数。print(str.isidentifier())  # 如果字符串是Python中的有效标识符,返回True。如果不是,则返回False。print(str.islower())  # islower() 方法检测字符串是否由小写字母组成.print(str.isupper())  # 检测字符串中所有的字母是否都为大写。print(str.isnumeric())  # 检查字符串中是否只包含数值字符。此方法只适用于Unicode的对象。print(str.isprintable())  # 如果字符串中的所有字符都可打印或字符串为空,则返回 True,否则返回 False。print(str.isspace())  # 检测字符串是否只由空白字符组成。print(str.istitle())  # 检测字符串中所有的单词拼写首字母是否为大写,且其他字母为小写。

7.其他

print(str.maketrans())#此静态方法返回一个 可供 str.translate() 使用的转换对照表。print(str.translate())print(str.encode(encoding="utf8", errors="strict"))  # 返回字符串编码后的数据,默认的编码是当前的字符串编码。errors为给定的不同错误处理方法。print(str.expandtabs())  # 用空格替换\t符号print(str.format(content="yyds"))format_map_dict = {"content": "yyds"}print(str.format_map(format_map_dict))  # str.format_map(mapping) 方法仅适用于字符串格式中可变数据参数来源于字典等映射关系数据时。mapping 会被直接使用而不是复制到一个 dict。

关键词: