Python 边做边学 9.6 数据库操作--查询条件解析工具(QCondition)

原文连接:http://blog.csdn.net/tomorrow13210073213/article/category/6931287

需求

  1. 定义一个查询条件解析工具,解析出简单查询sql语句,解析查询值;

Talk is cheap. Show me the code

class QCondition():
    # 解析后的sql语句
    __sql = None
    # 解析后的条件值
    __vals = None

    def __init__(self, condition):
        # 解析sql语句
        sql_s = ana_condition_sql(condition, "")
        if sql_s is None:
            self.__sql = None
        else:  # 需要删除前后的括号“()”
            sql_len = len(sql_s)
            if sql_len <= 2:
                self.__sql = None
            else:
                if sql_s.startswith("("):
                    sql_s = sql_s[1:sql_len - 1]
        self.__sql = sql_s
        # 解析条件值
        self.__vals = ana_condition_val(condition, [])

    def get_sql(self):
        return self.__sql

    def get_vals(self):
        return self.__vals


# 递归解析sql语句
# 最外层的“condition”是个tuple
def ana_condition_sql(condition, sql):
    # 条件单元
    if type(condition).__name__ == "Qwhere":
        if condition.get_field() is None or condition.get_express() is None or condition.get_value() is None:
            return sql
        ss = condition.get_field() + " " + condition.get_express() + " %s"
        sql = sql + ss + " "
        return sql
    # 排序单元
    if type(condition).__name__ == "Qorder":
        if condition.get_field() is None or condition.get_order() is None:
            return sql
        ss = " order by " + condition.get_field() + " " + condition.get_order() + ""
        sql = sql + ss + " "
        return sql
    # 分页单元
    if type(condition).__name__ == "Qpage":
        if condition.get_offset() is None or condition.get_size() is None:
            return sql
        ss = " limit " + str(condition.get_offset()) + "," + str(condition.get_size()) + ""
        sql = sql + ss + " "
        return sql
    # 连接字符串(=,>,< 等)
    if type(condition).__name__ == "str":
        sql = sql + " " + condition + " "
        return sql
    if type(condition).__name__ == "tuple":
        sql = sql + "("
        for __con in condition:
            sql = ana_condition_sql(__con, sql)
        sql = sql + ")"
        return sql
    return sql


# 递归解析sql查询值
def ana_condition_val(condition, vals):
    if type(condition).__name__ == "Qwhere":
        if condition.get_field() is None or condition.get_express() is None or condition.get_value() is None:
            return vals
        vals.append(condition.get_value())
        return vals
    if type(condition).__name__ == "tuple":
        for __con in condition:
            vals = ana_condition_val(__con, vals);
        return vals
    return vals

具体使用后面详述;

以上内容仅供练习,学习使用;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值