mirror of https://github.com/midoks/mdserver-web
parent
21f5670a85
commit
7a9f1ebf5e
@ -0,0 +1,291 @@ |
||||
# coding: utf-8 |
||||
|
||||
import re |
||||
import os |
||||
import sys |
||||
|
||||
import pymysql.cursors |
||||
|
||||
|
||||
class ORM: |
||||
__DB_PASS = None |
||||
__DB_USER = 'root' |
||||
__DB_PORT = 3306 |
||||
__DB_NAME = '' |
||||
__DB_HOST = 'localhost' |
||||
__DB_CONN = None |
||||
__DB_CUR = None |
||||
__DB_ERR = None |
||||
__DB_CNF = '/etc/my.cnf' |
||||
__DB_SOCKET = '/www/server/mysql/mysql.sock' |
||||
__DB_CHARSET = "utf8" |
||||
|
||||
# orm |
||||
__DB_TABLE = "" # 被操作的表名称 |
||||
__OPT_WHERE = "" # where条件 |
||||
__OPT_LIMIT = "" # limit条件 |
||||
__OPT_GROUP = "" # group条件 |
||||
__OPT_ORDER = "" # order条件 |
||||
__OPT_FIELD = "*" # field条件 |
||||
__OPT_PARAM = () # where值 |
||||
|
||||
def __Conn(self): |
||||
'''连接数据库''' |
||||
try: |
||||
|
||||
if os.path.exists(self.__DB_SOCKET): |
||||
try: |
||||
self.__DB_CONN = pymysql.connect(host=self.__DB_HOST, user=self.__DB_USER, passwd=self.__DB_PASS, |
||||
database=self.__DB_NAME, |
||||
port=int(self.__DB_PORT), charset=self.__DB_CHARSET, connect_timeout=1, |
||||
unix_socket=self.__DB_SOCKET, cursorclass=pymysql.cursors.DictCursor) |
||||
except Exception as e: |
||||
self.__DB_HOST = '127.0.0.1' |
||||
self.__DB_CONN = pymysql.connect(host=self.__DB_HOST, user=self.__DB_USER, passwd=self.__DB_PASS, |
||||
database=self.__DB_NAME, |
||||
port=int(self.__DB_PORT), charset=self.__DB_CHARSET, connect_timeout=1, |
||||
unix_socket=self.__DB_SOCKET, cursorclass=pymysql.cursors.DictCursor) |
||||
else: |
||||
try: |
||||
self.__DB_CONN = pymysql.connect(host=self.__DB_HOST, user=self.__DB_USER, passwd=self.__DB_PASS, |
||||
database=self.__DB_NAME, |
||||
port=int(self.__DB_PORT), charset=self.__DB_CHARSET, connect_timeout=1, |
||||
cursorclass=pymysql.cursors.DictCursor) |
||||
except Exception as e: |
||||
self.__DB_HOST = '127.0.0.1' |
||||
self.__DB_CONN = pymysql.connect(host=self.__DB_HOST, user=self.__DB_USER, passwd=self.__DB_PASS, |
||||
database=self.__DB_NAME, |
||||
port=int(self.__DB_PORT), charset=self.__DB_CHARSET, connect_timeout=1, |
||||
cursorclass=pymysql.cursors.DictCursor) |
||||
|
||||
self.__DB_CUR = self.__DB_CONN.cursor() |
||||
return True |
||||
except Exception as e: |
||||
self.__DB_ERR = e |
||||
return False |
||||
|
||||
def setDbConf(self, conf): |
||||
self.__DB_CNF = conf |
||||
|
||||
def setSocket(self, sock): |
||||
self.__DB_SOCKET = sock |
||||
|
||||
def setCharset(self, charset): |
||||
self.__DB_CHARSET = charset |
||||
|
||||
def setHost(self, host): |
||||
self.__DB_HOST = host |
||||
|
||||
def setPort(self, port): |
||||
self.__DB_PORT = port |
||||
|
||||
def setUser(self, user): |
||||
self.__DB_USER = user |
||||
|
||||
def setPwd(self, pwd): |
||||
self.__DB_PASS = pwd |
||||
|
||||
def getPwd(self): |
||||
return self.__DB_PASS |
||||
|
||||
def setDbName(self, name): |
||||
self.__DB_NAME = name |
||||
|
||||
def execute(self, sql, param=()): |
||||
# 执行SQL语句返回受影响行 |
||||
if not self.__Conn(): |
||||
return self.__DB_ERR |
||||
try: |
||||
result = self.__DB_CUR.execute(sql,param) |
||||
self.__DB_CONN.commit() |
||||
self.__Close() |
||||
return result |
||||
except Exception as ex: |
||||
return ex |
||||
|
||||
def query(self, sql, param=()): |
||||
# 执行SQL语句返回数据集 |
||||
if not self.__Conn(): |
||||
return self.__DB_ERR |
||||
try: |
||||
self.__DB_CUR.execute(sql,param) |
||||
result = self.__DB_CUR.fetchall() |
||||
# print(result) |
||||
# 将元组转换成列表 |
||||
# data = map(list, result) |
||||
self.__Close() |
||||
return result |
||||
except Exception as ex: |
||||
return ex |
||||
|
||||
def __Close(self): |
||||
# 关闭连接 |
||||
self.__DB_CUR.close() |
||||
self.__DB_CONN.close() |
||||
|
||||
|
||||
def checkInput(self, data): |
||||
if not data: |
||||
return data |
||||
if type(data) != str: |
||||
return data |
||||
checkList = [ |
||||
{'d': '<', 'r': '<'}, |
||||
{'d': '>', 'r': '>'}, |
||||
{'d': '\'', 'r': '‘'}, |
||||
{'d': '"', 'r': '“'}, |
||||
{'d': '&', 'r': '&'}, |
||||
{'d': '#', 'r': '#'}, |
||||
{'d': '<', 'r': '<'} |
||||
] |
||||
for v in checkList: |
||||
data = data.replace(v['d'], v['r']) |
||||
return data |
||||
|
||||
|
||||
def table(self, table): |
||||
# 设置表名 |
||||
self.__DB_TABLE = table |
||||
return self |
||||
|
||||
def where(self, where, param): |
||||
# WHERE条件 |
||||
if where: |
||||
self.__OPT_WHERE = " WHERE " + where |
||||
self.__OPT_PARAM = param |
||||
return self |
||||
|
||||
def andWhere(self, where, param): |
||||
# WHERE条件 |
||||
if where: |
||||
self.__OPT_WHERE = self.__OPT_WHERE + " and " + where |
||||
# print(param) |
||||
# print(self.__OPT_PARAM) |
||||
self.__OPT_PARAM = self.__OPT_PARAM + param |
||||
return self |
||||
|
||||
def order(self, order): |
||||
# ORDER条件 |
||||
if len(order): |
||||
self.__OPT_ORDER = " ORDER BY " + order |
||||
else: |
||||
self.__OPT_ORDER = "" |
||||
return self |
||||
|
||||
def group(self, group): |
||||
if len(group): |
||||
self.__OPT_GROUP = " GROUP BY " + group |
||||
else: |
||||
self.__OPT_GROUP = "" |
||||
return self |
||||
|
||||
def limit(self, limit): |
||||
# LIMIT条件 |
||||
if len(limit): |
||||
self.__OPT_LIMIT = " LIMIT " + limit |
||||
else: |
||||
self.__OPT_LIMIT = "" |
||||
return self |
||||
|
||||
def field(self, field): |
||||
# FIELD条件 |
||||
if len(field): |
||||
self.__OPT_FIELD = field |
||||
return self |
||||
|
||||
def find(self): |
||||
# 取一行数据 |
||||
result = self.limit("1").select() |
||||
# print(result) |
||||
if len(result) == 1: |
||||
return result[0] |
||||
return result |
||||
|
||||
def select(self): |
||||
# 查询数据集 |
||||
|
||||
sql = "SELECT " + self.__OPT_FIELD + " FROM " + self.__DB_TABLE + \ |
||||
self.__OPT_WHERE + self.__OPT_GROUP + self.__OPT_ORDER + self.__OPT_LIMIT |
||||
# print(sql) |
||||
# print(self.__OPT_PARAM) |
||||
result = self.query(sql, self.__OPT_PARAM) |
||||
return result |
||||
|
||||
def getField(self, keyName): |
||||
# 取回指定字段 |
||||
result = self.field(keyName).select() |
||||
# print(result[0][keyName]) |
||||
if len(result) == 1: |
||||
return result[0][keyName] |
||||
return result |
||||
|
||||
def setField(self, keyName, keyValue): |
||||
# 更新指定字段 |
||||
return self.save(keyName, (keyValue,)) |
||||
|
||||
# 构造数据 |
||||
def __format_pdata(self, pdata): |
||||
keys = pdata.keys() |
||||
keys_str = ','.join(keys) |
||||
param = [] |
||||
for k in keys: |
||||
param.append(pdata[k]) |
||||
return keys_str, tuple(param) |
||||
|
||||
def delete(self, id=None): |
||||
# 删除数据 |
||||
|
||||
if id: |
||||
self.__OPT_WHERE = " WHERE id=%s" |
||||
self.__OPT_PARAM = (id,) |
||||
sql = "DELETE FROM " + self.__DB_TABLE + self.__OPT_WHERE |
||||
# print(sql) |
||||
result = self.execute(sql, self.__OPT_PARAM) |
||||
return result |
||||
|
||||
|
||||
def save(self, keys, param): |
||||
# 更新数据 |
||||
|
||||
opt = "" |
||||
for key in keys.split(','): |
||||
opt += key + "=%s," |
||||
opt = opt[0:len(opt) - 1] |
||||
sql = "UPDATE " + self.__DB_TABLE + " SET " + opt + self.__OPT_WHERE |
||||
|
||||
# 处理拼接WHERE与UPDATE参数 |
||||
tmp = list(param) |
||||
for arg in self.__OPT_PARAM: |
||||
tmp.append(arg) |
||||
self.__OPT_PARAM = tuple(tmp) |
||||
|
||||
# print(sql,self.__OPT_PARAM) |
||||
result = self.execute(sql, self.__OPT_PARAM) |
||||
return result |
||||
|
||||
# 更新数据 |
||||
def update(self, pdata): |
||||
if not pdata: |
||||
return False |
||||
keys, param = self.__format_pdata(pdata) |
||||
return self.save(keys, param) |
||||
|
||||
def add(self, keys, param): |
||||
# 插入数据 |
||||
values = "" |
||||
for key in keys.split(','): |
||||
values += "%s," |
||||
values = self.checkInput(values[0:len(values) - 1]) |
||||
sql = "INSERT INTO " + self.__DB_TABLE + \ |
||||
"(" + keys + ") " + "VALUES(" + values + ")" |
||||
|
||||
# print(sql) |
||||
result = self.execute(sql, param) |
||||
return result |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Loading…
Reference in new issue