正文
Python学习之五_字符串处理生成查询SQL
前言
昨天想给同事讲解一下获取查询部分表核心列信息的SQL方法
也写好了一个简单文档. 但是感觉不是很优雅.
最近两三天晚上一直在学习Python. 想将昨天的文档处理成一个工具的方式.
将查询SQL展示出来. 然后再由同事手工检查确认. 增加时间范围等处理
理论上这样能够加快处理速度. 避免过多的拼接过程.
复制
Python的处理过程
添加三个脚本文件
dbconnection.py 拼接数据库连接字符串使用
gettablesql.py 查询数据库, 获取表SQL使用
getsql.py 接收输入的表名, 打印这个表核心列查询SQL
需要的module主要有
sys,configparser,jaydebeapi
方法比较简单, 本着自学的态度进行学习与使用.
复制
dbconnection.py
# coding=utf-8
import jaydebeapi
import configparser
config = 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 dbconnection
import configparser
def 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 gettablesql
import sys
tablename = 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 可以提示出具体的判断函数
isascii
isspace
isupper
islower
复制
2. 字符串拼接
print('-'.join(zhaobsh))
print(zhaobsh.center(100, '*'))
print(zhaobsh.ljust(50, '*'))
如果指定的长度小于原字符串的长度则返回原字符串。
print(zhaobsh.rjust(50, '*'))
如果指定的长度小于原字符串长度,则直接返回原字符串。
print(zhaobsh.zfill(50))
复制
3. 查找
print(str.count('p'))
print(str.find('pip'))
print(str.index('pip'))
print(str.rfind(' '))
print(str.rindex(' '))
复制
4.分隔和替换
print(str.replace(' ', '-'))
print(str.partition(' '))
print(str.rpartition(' '))
print(str.rsplit(' '))
print(str.split(' '))
print(str.splitlines())
print(str.lstrip('p'))
print(str.rstrip('p'))
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'))
print(str.endswith('office'))
print(str.isalnum())
print(str.isalpha())
print(str.isascii())
print(str.isdecimal())
print(str.isdigit())
print(str.isidentifier())
print(str.islower())
print(str.isupper())
print(str.isnumeric())
print(str.isprintable())
print(str.isspace())
print(str.istitle())
复制
7.其他
print(str.maketrans())
print(str.translate())
print(str.encode(encoding='utf8', errors='strict'))
print(str.expandtabs())
print(str.format(content='yyds'))
format_map_dict = {'content': 'yyds'}
print(str.format_map(format_map_dict))
复制