sqlparse(未完待续)

分割SQL语句

sqlparse.split(sql,encoding = None )

sql - 包含一个或多个SQL语句的字符串
encoding - 语句的编码(可选)

	sql = 'select * from foo; select * from bar;'
	sql_list = sqlparse.split(sql)
	print(sql_list)

美化sql

sqlparse.format(sql,encoding = None, ** options )

format()函数接受关键字参数

  1. keyword_case 关键词upperlowersql的保留字大小写

  2. identifier_case 标识符的upperlower大小写

  3. strip_comments=Ture删除注释

  4. reindent=Ture美化sq缩进语句发生改变

    sql = "select * from foo where id in (select id from bar);"
    sqlpe = sqlparse.format(sql, reindent=True, keyword_case='upper')
    print(sqlpe)
    
    
    SELECT *
    FROM foo
    WHERE id IN
        (SELECT id
         FROM bar);
    

基类

所有返回的对象都从这些基类继承。在Token此类表示单个令牌和 TokenList类是一组令牌。后者提供了检查其子类的方法

1.Token

sqlparse.sql.Token(ttype,value )

它表示单个标记,并具有两个实例属性:
value标记的未更改值,是标记ttype的类型。

  1. flatten()解决分组

  2. has_ancestor(other)如果其他的再其父类中,则返回

  3. is_child_of(other)如果标记是其他标记的子标记,则返回

  4. match(ttype, values, regex=False)

  5. within(group_cls)

    sql = 'select * from "someschema"."mytable" where id = 1'
    
    parsed = sqlparse.parse(sql)
    stmt = parsed[0].tokens
     for token in stmt:
    	 print(token.ttype, token.value)
    

返回结果如下

    Token.Keyword.DML select
    Token.Text.Whitespace  
    Token.Wildcard *
    Token.Text.Whitespace  
    Token.Keyword from
    Token.Text.Whitespace  
    None "someschema"."mytable"
    Token.Text.Whitespace  
    None where id = 1

Token子类类型

  1. sqlparse.sql.Token
  2. sqlparse.sql.Where
  3. sqlparse.sql.Identifier
  4. sqlparse.sql.IdentifierList

token.ttype属性(sqlparse.sql.Token)

  1. Token.Keyword.DDL 标记语法create语句
  2. Token.Keyword.DML SELECT标记法 selectupdatadelete
  3. Token.Keyword SQL保留的关键字
  4. Token.Text.Whitespace 空格,sql语句间的空格
  5. Token.Text.Whitespace.Newline sql新的一行间空格
  6. Token.Punctuation 结束标点通常为

2.TokenList

一组令牌,t其有一个额外的属性tokens,包含子标记列表

flatten()
get_alias()
get_name()
get_parent_name()
get_token_at_offset(offset)
group_tokens(grp_cls, start, end, include_end=True, extend=False)
has_alias()
insert_after(where, token, skip_ws=True)
insert_before(where, token)
token_first(skip_ws=True, skip_cm=False)
token_index(token, start=0)
token_next(idx, skip_ws=True, skip_cm=False, _reverse=False)
token_prev(idx, skip_ws=True, skip_cm=False)

SQL表示类(SQL语句的不同部分)

  • 判断sql的类型DML/DDL

    sqlparse.sql.Statement(tokens = None )
    

    get_type()语句的类型

     sql = sqlparse.sql.Statement(stmt)
     print(sql.get_type())
    

    返回SQL标记关键字SELECTselectupdatadeletecreate

  • Identifier标识符

     sqlparse.sql.Identifier(tokens = None )
    

    get_array_indices()返回索引标记列表的迭代器
    get_ordering()返回排序或None大写字符串
    get_typecastNone以字符串形式返回类型转换或此对象
    is_wildcardTrue如果此标识符包含通配符,则返回

  • IdentifierList标识符列表

     sqlparse.sql.IdentifierList(tokens = None)
    

    get_identifiers返回标识符, 不包含空格和标点符号

  • where语句

    sqlparse.sql.Where(tokens = None )
    
  • 一个或多个WHEN且可能是ELSE部分的CASE语句

     sqlparse.sql.Case(tokens = None )
    

    get_cases(skip_ws = False )返回两个元组的列表(条件,值)
    if else 存在 条件是None

  • 括号之间的标记

     sqlparse.sql.Parenthesis(tokens = None )
    
  • 带有else ifelse部分的if子句

     sqlparse.sql.If(tokens=None)
    
  • FOR循环

     sqlparse.sql.For(tokens = None )
    
  • var:= val;这样的赋值

     sqlparse.sql.Assignment(tokens = None )
    
  • WHERE子句中使用的比较

      sqlparse.sql.Assignment(tokens = None )
    

你可能感兴趣的:(数据库)