mirror of https://github.com/midoks/mdserver-web
pull/109/head
parent
09cb564218
commit
64648eb9f2
@ -0,0 +1,290 @@ |
||||
#coding: utf-8 |
||||
# +------------------------------------------------------------------- |
||||
# | 宝塔Linux面板 |
||||
# +------------------------------------------------------------------- |
||||
# | Copyright (c) 2015-2016 宝塔软件(http://bt.cn) All rights reserved. |
||||
# +------------------------------------------------------------------- |
||||
# | Author: 黄文良 <287962566@qq.com> |
||||
# +------------------------------------------------------------------- |
||||
|
||||
import sqlite3 |
||||
import os |
||||
|
||||
class Sql(): |
||||
#------------------------------ |
||||
# 数据库操作类 For sqlite3 |
||||
#------------------------------ |
||||
__DB_FILE = None # 数据库文件 |
||||
__DB_CONN = None # 数据库连接对象 |
||||
__DB_TABLE = "" # 被操作的表名称 |
||||
__OPT_WHERE = "" # where条件 |
||||
__OPT_LIMIT = "" # limit条件 |
||||
__OPT_ORDER = "" # order条件 |
||||
__OPT_FIELD = "*" # field条件 |
||||
__OPT_PARAM = () # where值 |
||||
|
||||
def __init__(self): |
||||
self.__DB_FILE = 'data/default.db' |
||||
|
||||
def __GetConn(self): |
||||
#取数据库对象 |
||||
try: |
||||
if self.__DB_CONN == None: |
||||
self.__DB_CONN = sqlite3.connect(self.__DB_FILE) |
||||
except Exception,ex: |
||||
return "error: " + str(ex) |
||||
|
||||
def dbfile(self,name): |
||||
self.__DB_FILE = 'data/' + name + '.db' |
||||
return self |
||||
|
||||
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 order(self,order): |
||||
#ORDER条件 |
||||
if len(order): |
||||
self.__OPT_ORDER = " ORDER BY "+order |
||||
return self |
||||
|
||||
|
||||
def limit(self,limit): |
||||
#LIMIT条件 |
||||
if len(limit): |
||||
self.__OPT_LIMIT = " LIMIT "+limit |
||||
return self |
||||
|
||||
|
||||
def field(self,field): |
||||
#FIELD条件 |
||||
if len(field): |
||||
self.__OPT_FIELD = field |
||||
return self |
||||
|
||||
|
||||
def select(self): |
||||
#查询数据集 |
||||
self.__GetConn() |
||||
try: |
||||
sql = "SELECT " + self.__OPT_FIELD + " FROM " + self.__DB_TABLE + self.__OPT_WHERE + self.__OPT_ORDER + self.__OPT_LIMIT |
||||
result = self.__DB_CONN.execute(sql,self.__OPT_PARAM) |
||||
data = result.fetchall() |
||||
#构造字曲系列 |
||||
if self.__OPT_FIELD != "*": |
||||
field = self.__OPT_FIELD.split(',') |
||||
tmp = [] |
||||
for row in data: |
||||
i=0 |
||||
tmp1 = {} |
||||
for key in field: |
||||
tmp1[key] = row[i] |
||||
i += 1 |
||||
tmp.append(tmp1) |
||||
del(tmp1) |
||||
data = tmp |
||||
del(tmp) |
||||
else: |
||||
#将元组转换成列表 |
||||
tmp = map(list,data) |
||||
data = tmp |
||||
del(tmp) |
||||
self.__close() |
||||
return data |
||||
except Exception,ex: |
||||
return "error: " + str(ex) |
||||
|
||||
|
||||
def getField(self,keyName): |
||||
#取回指定字段 |
||||
result = self.field(keyName).select(); |
||||
if len(result) == 1: |
||||
return result[0][keyName] |
||||
return result |
||||
|
||||
|
||||
def setField(self,keyName,keyValue): |
||||
#更新指定字段 |
||||
return self.save(keyName,(keyValue,)) |
||||
|
||||
|
||||
def find(self): |
||||
#取一行数据 |
||||
result = self.limit("1").select() |
||||
if len(result) == 1: |
||||
return result[0] |
||||
return result |
||||
|
||||
|
||||
def count(self): |
||||
#取行数 |
||||
key="COUNT(*)" |
||||
data = self.field(key).select() |
||||
try: |
||||
return int(data[0][key]) |
||||
except: |
||||
return 0 |
||||
|
||||
|
||||
def add(self,keys,param): |
||||
#插入数据 |
||||
self.__GetConn() |
||||
self.__DB_CONN.text_factory = str |
||||
try: |
||||
values="" |
||||
for key in keys.split(','): |
||||
values += "?," |
||||
values = self.checkInput(values[0:len(values)-1]); |
||||
sql = "INSERT INTO "+self.__DB_TABLE+"("+keys+") "+"VALUES("+values+")" |
||||
result = self.__DB_CONN.execute(sql,param) |
||||
id = result.lastrowid |
||||
self.__close() |
||||
self.__DB_CONN.commit() |
||||
return id |
||||
except Exception,ex: |
||||
return "error: " + str(ex) |
||||
|
||||
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 addAll(self,keys,param): |
||||
#插入数据 |
||||
self.__GetConn() |
||||
self.__DB_CONN.text_factory = str |
||||
try: |
||||
values="" |
||||
for key in keys.split(','): |
||||
values += "?," |
||||
values = values[0:len(values)-1] |
||||
sql = "INSERT INTO "+self.__DB_TABLE+"("+keys+") "+"VALUES("+values+")" |
||||
result = self.__DB_CONN.execute(sql,param) |
||||
return True |
||||
except Exception,ex: |
||||
return "error: " + str(ex) |
||||
|
||||
def commit(self): |
||||
self.__close() |
||||
self.__DB_CONN.commit() |
||||
|
||||
|
||||
def save(self,keys,param): |
||||
#更新数据 |
||||
self.__GetConn() |
||||
self.__DB_CONN.text_factory = str |
||||
try: |
||||
opt = "" |
||||
for key in keys.split(','): |
||||
opt += key + "=?," |
||||
opt = opt[0:len(opt)-1] |
||||
sql = "UPDATE " + self.__DB_TABLE + " SET " + opt+self.__OPT_WHERE |
||||
|
||||
import public |
||||
public.writeFile('/tmp/test.pl',sql) |
||||
|
||||
#处理拼接WHERE与UPDATE参数 |
||||
tmp = list(param) |
||||
for arg in self.__OPT_PARAM: |
||||
tmp.append(arg) |
||||
self.__OPT_PARAM = tuple(tmp) |
||||
result = self.__DB_CONN.execute(sql,self.__OPT_PARAM) |
||||
self.__close() |
||||
self.__DB_CONN.commit() |
||||
return result.rowcount |
||||
except Exception,ex: |
||||
return "error: " + str(ex) |
||||
|
||||
def delete(self,id=None): |
||||
#删除数据 |
||||
self.__GetConn() |
||||
try: |
||||
if id: |
||||
self.__OPT_WHERE = " WHERE id=?" |
||||
self.__OPT_PARAM = (id,) |
||||
sql = "DELETE FROM " + self.__DB_TABLE + self.__OPT_WHERE |
||||
result = self.__DB_CONN.execute(sql,self.__OPT_PARAM) |
||||
self.__close() |
||||
self.__DB_CONN.commit() |
||||
return result.rowcount |
||||
except Exception,ex: |
||||
return "error: " + str(ex) |
||||
|
||||
|
||||
def execute(self,sql,param): |
||||
#执行SQL语句返回受影响行 |
||||
self.__GetConn() |
||||
try: |
||||
result = self.__DB_CONN.execute(sql,param) |
||||
self.__DB_CONN.commit() |
||||
return result.rowcount |
||||
except Exception,ex: |
||||
return "error: " + str(ex) |
||||
|
||||
|
||||
def query(self,sql,param): |
||||
#执行SQL语句返回数据集 |
||||
self.__GetConn() |
||||
try: |
||||
result = self.__DB_CONN.execute(sql,param) |
||||
#将元组转换成列表 |
||||
data = map(list,result) |
||||
return data |
||||
except Exception,ex: |
||||
return "error: " + str(ex) |
||||
|
||||
def create(self,name): |
||||
#创建数据表 |
||||
self.__GetConn() |
||||
import public |
||||
script = public.readFile('data/' + name + '.sql') |
||||
result = self.__DB_CONN.executescript(script) |
||||
self.__DB_CONN.commit() |
||||
return result.rowcount |
||||
|
||||
def fofile(self,filename): |
||||
#执行脚本 |
||||
self.__GetConn() |
||||
import public |
||||
script = public.readFile(filename) |
||||
result = self.__DB_CONN.executescript(script) |
||||
self.__DB_CONN.commit() |
||||
return result.rowcount |
||||
|
||||
def __close(self): |
||||
#清理条件属性 |
||||
self.__OPT_WHERE = "" |
||||
self.__OPT_FIELD = "*" |
||||
self.__OPT_ORDER = "" |
||||
self.__OPT_LIMIT = "" |
||||
self.__OPT_PARAM = () |
||||
|
||||
def close(self): |
||||
#释放资源 |
||||
try: |
||||
self.__DB_CONN.close() |
||||
self.__DB_CONN = None |
||||
except: |
||||
pass |
||||
|
Binary file not shown.
Binary file not shown.
Loading…
Reference in new issue