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

python,学习,字符串,处理,生成,查询,sql · 浏览次数 : 47

小编点评

生成内容时需要带简单的排版,可以使用以下方法进行排版: 1. 使用字符串格式方法 `str.format()` 进行格式化,例如 `str.format(content='yyds')`。 2. 使用字符串方法 `str.strip()` 去掉字符串末尾的空白字符。 3. 使用字符串方法 `str.lstrip()` 去掉字符串开头的空白字符。 4. 使用字符串方法 `str.rstrip()` 去掉字符串最后端的空白字符。 5. 使用字符串方法 `str.split()` 进行字符串分割,例如 `str.split(' ')`。 6. 使用字符串方法 `str.join()` 连接字符串,例如 `str.join(['abc', 'def', 'ghi'])`。 这些方法可以帮助我们生成内容时带简单的排版,并使内容更加易于阅读。

正文

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相似的内容:

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

Python学习之五_字符串处理生成查询SQL 前言 昨天想给同事讲解一下获取查询部分表核心列信息的SQL方法 也写好了一个简单文档. 但是感觉不是很优雅. 最近两三天晚上一直在学习Python. 想将昨天的文档处理成一个工具的方式. 将查询SQL展示出来. 然后再由同事手工检查确认. 增加时间范围

< Python全景系列-8 > Python超薄感知,超强保护:异常处理的绝佳实践

欢迎来到系列第八篇,异常处理的深入探讨。本文将分五部分展开。首先,我们将学习Python异常处理的基础知识,理解`try/except`语句的用法。然后,我们将了解Python的常见异常类型并通过实例理解它们的作用。第三部分,我们将更深入地解析`try-except`块,理解其工作原理及更加复杂的用法。在第四部分,我们会介绍如何自定义异常,并讨论其应用场景。最后,我们将介绍上下文管理器在异常处理中

Python学习之四_部分battery的学习

Python学习之四_部分battery的学习 CentOS升级pip的方法 yum install python3 之后, 一般centos的版本都很低, 有时候很多module 是无法安装的. 一般可以通过他进行升级: pip3 install -U pip 注意如果无法升级, 可以先这样处理

Python学习之六_同时访问Oracle和Mysql的方法

Python学习之六_同时访问Oracle和Mysql的方法 背景 jaydebeapi 可以访问大部分数据库. 但是他有一个问题是仅能够访问一种类型的数据库. 如果同事连接两种数据库,那么就会出现问题 会有如下的提示: TypeError: Class com.mysql.cj.jdbc.Driv

Python学习之七_input和print

Python学习之七_input和print 摘要 python3 之后 函数必须带 () 了 因为我开始学习的比较晚, 所以准备Python3开始学起 前面主要是模仿别人的代码进行学习 后续慢慢学习 使用python调用ebpf等内容. 这里简单先总结一下input和print的函数. 作为一个学

Python学习之八_调用Outlook发送邮件以及调用远程windows上面的python

Python学习之八_调用Outlook发送邮件以及调用远程windows上面的python 摘要 之前只有一个需求是发送加密邮件. 之前一直是使用linux进行发送.但是总是无法发送加密邮件. 最近学习python, 发现可以使用 python来调用outlook来发送邮件. 这样就比较简单了.

Python学习之九_winrm执行远程机器的cmd命令

Python学习之九_winrm执行远程机器的cmd命令 winrm # 注意如下命令需要按照顺序执行. # 打开powershell的管理员模式进行如下的操作. set-executionpolicy remotesigned winrm quickconfig winrm set winrm/c

Python学习之十_paramiko的简单学习

Python学习之十_paramiko的简单学习 简介 pywinrm 是python用于连接访问windows的工具 paramiko 是python用于连接访问linux的工具 ansible等工具很多也是基于类似的组件进行的处理 连接不同的系统进行命令行的操作. paramiko的简介 par

Python学习之十一_Windows获取硬件信息

Python学习之十一_Windows获取硬件信息 简介 网上找了一些方法简单整理了下,可以快速获取部分信息 包含机器名称等. 以及序列号相关 部分学习来源: https://blog.51cto.com/u_15354476/5339864 源码 import psutil import wmi

Python学习之十三_pip的学习

Python学习之十三_pip的学习 pip的含义 pip: pip is the package installer for Python. You can use pip to install packages from the Python Package Index and other in