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)) # 返回指定长度的字符串,原字符串右对齐,前面填充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,否则返回 False
print(str.isalpha()) # 如果 string 至少有一个字符并且所有字符都是字母则返回 True,否则返回 False
print(str.isascii()) # 如果字符串为空或字符串中的所有字符都是 ASCII,则返回 True,否则返回 False。
print(str.isdecimal()) # 如果字符串中的所有字符都是十进制字符,则返回True
print(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。

Python学习之五_字符串处理生成查询SQL的更多相关文章

  1. Python学习-第二天-字符串和常用数据结构

    Python学习-第二天-字符串和常用数据结构 字符串的基本操作 def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1 ...

  2. Python学习笔记_我的参考网址

    Python学习笔记, 下面记录网上搜到的可参考的网址: 一.关于Tkinter 1.Python3中tkinter模块使用方法详解 https://blog.csdn.net/Fighting_Bo ...

  3. 【Python学习之五】函数

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 python3.6 Python不但能非常灵活地定义函数,而且本身内置 ...

  4. 简单理解ORM,实体类生成查询SQL语句

    目前有很多开源的ORM项目,大多情况下也不需要我们重复去造轮子,我们只需要了解轮子怎么造的,怎么用就可以,下面简单说一下怎么通过实体生成一个SQL语句: 先建立2个Attribute类,TableAt ...

  5. 实验楼Python学习记录_挑战字符串操作

    自我学习记录 Python3 挑战实验 -- 字符串操作 目标 在/home/shiyanlou/Code创建一个 名为 FindDigits.py 的Python 脚本,请读取一串字符串并且把其中所 ...

  6. Python学习笔记_生成验证码

    import random def verification_code(): num = [str(x) for x in range(10)] # 列表生成器0-9 upper = [chr(x) ...

  7. python基础操作_字符串操作_列表操作list

    #字符串可以通过下表取值,如下程序 names='java python' print(names[0],names[5]) #使用for循环轮询所有name值 ''' for name in nam ...

  8. python学习二,字符串常用操作

    字符串可以说是在日常开发中应用最广泛的了,现在来总结下有关python中有关字符串一些常用操作 首先我们声明一个字符串变量 str = "hello world" 下面我们来依次介 ...

  9. python学习——用dictionary实现通过地区查询邮编

    刚刚学习了python的基本语法,对自己学习的内容进行实践下. dictionary字典(类似map) 总结:1.dictionary比list读取速度快,但是占用内存大,适合存放不需修改,经常查询的 ...

  10. Python学习杂记_3_字符串操作的常用方法

    字符串操作 字符串是可以通过下标来进行取值的,但是由于字符串是不可变变量,不能通过下标来修改它的值(形式如 字符串[下标]),下标从0开始,最大下标值是字符串长度减1,即len(string)-1 P ...

随机推荐

  1. 记一次uboot编译/经验/教训

    记一次uboot编译/经验/教训 - 最近学习uboot移植有关的知识,在了解原理后自己编译uboot,但是出现了好多各式各样的错误,最后换了几次系统环境之后才找到错误来源 1.准备源码与交叉编译工具 ...

  2. 9、线性布局(Row和Column)

    自定义的IconContainer void main() { runApp(MaterialApp( theme: ThemeData(primarySwatch: Colors.yellow), ...

  3. Word2Vec模型总结

    1.Huffman树的构造 解析:给定n个权值作为n个叶子节点,构造一棵二叉树,若它的带权路径长度达到最小,则称这样的二叉树为最优二叉树,也称Huffman树.数的带权路径长度规定为所有叶子节点的带权 ...

  4. LiteOS内核源码分析:消息队列Queue

    摘要:本文通过分析LiteOS队列模块的源码,掌握队列使用上的差异. 队列(Queue)是一种常用于任务间通信的数据结构.任务能够从队列里面读取消息,当队列中的消息为空时,挂起读取任务:当队列中有新消 ...

  5. 顶会VLDB‘22论文解读:CAE-ENSEMBLE算法

    摘要:针对时间序列离群点检测问题,提出了基于CNN-AutoEncoder和集成学习的CAE-ENSEMBLE深度神经网络算法,并通过大量的实验证明CAE-ENSEMBLE算法能有效提高时间序列离群点 ...

  6. 云图说|玩转华为HiLens之端云协同AI开发

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要: 华为HiLens ...

  7. 最新的iOS应用上架App Store详细流程解析

    最新的iOS应用上架App Store详细流程解析 2023已经过了2/3的时间,由于现在苹果签名市场的价格不断的上升,现在很多的开发商一直在想着如何进行上架一些自己的产品,下面小编来给大家梳理一下上 ...

  8. python 读取数据调翻译更新表字段

    import time import requests import pymysql import datetime import random from hashlib import md5 imp ...

  9. # github.com/coreos/etcd/clientv3/balancer/resolver/endpoint

    linux使用go连接etcd集群时报错: # github.com/coreos/etcd/clientv3/balancer/resolver/endpoint /root/go/pkg/mod/ ...

  10. 【JAVA基础】错误捕获try-catch

    错误捕获try-catch 使用BaseController统一管理 项目结构 UserController package com.cy.store.controller; import com.c ...