您的位置:首页 > 编程语言 > Python开发

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

2017-08-21 19:07 776 查看
原文连接:http://blog.csdn.net/tomorrow13210073213/article/category/6931287

需求

定义一个查询条件解析工具,解析出简单查询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


具体使用后面详述;

以上内容仅供练习,学习使用;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息