kcwebs 1.87__tar.gz → 1.89__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {kcwebs-1.87 → kcwebs-1.89}/PKG-INFO +2 -2
- {kcwebs-1.87 → kcwebs-1.89}/kcwebs/__init__.py +1 -1
- {kcwebs-1.87 → kcwebs-1.89}/kcwebs/common/autoload.py +14 -20
- {kcwebs-1.87 → kcwebs-1.89}/kcwebs/utill/db/mongodb.py +2 -1
- {kcwebs-1.87 → kcwebs-1.89}/kcwebs.egg-info/PKG-INFO +2 -2
- {kcwebs-1.87 → kcwebs-1.89}/kcwebs.egg-info/SOURCES.txt +1 -3
- {kcwebs-1.87 → kcwebs-1.89}/kcwebs.egg-info/requires.txt +4 -3
- {kcwebs-1.87 → kcwebs-1.89}/setup.py +1 -1
- kcwebs-1.87/kcwebs/utill/db/sqlite.py +0 -684
- {kcwebs-1.87 → kcwebs-1.89}/README.md +0 -0
- {kcwebs-1.87 → kcwebs-1.89}/kcwebs/common/__init__.py +0 -0
- {kcwebs-1.87 → kcwebs-1.89}/kcwebs/common/session.py +0 -0
- {kcwebs-1.87 → kcwebs-1.89}/kcwebs/config/__init__.py +0 -0
- {kcwebs-1.87 → kcwebs-1.89}/kcwebs/kcwebs.py +0 -0
- {kcwebs-1.87 → kcwebs-1.89}/kcwebs/tempfile/kcwebs/app/__init__.py +0 -0
- {kcwebs-1.87 → kcwebs-1.89}/kcwebs/tempfile/kcwebs/app/api/__init__.py +0 -0
- {kcwebs-1.87 → kcwebs-1.89}/kcwebs/tempfile/kcwebs/app/api/common/__init__.py +0 -0
- {kcwebs-1.87 → kcwebs-1.89}/kcwebs/tempfile/kcwebs/app/api/common/autoload.py +0 -0
- {kcwebs-1.87 → kcwebs-1.89}/kcwebs/tempfile/kcwebs/app/api/controller/__init__.py +0 -0
- {kcwebs-1.87 → kcwebs-1.89}/kcwebs/tempfile/kcwebs/app/api/controller/index/__init__.py +0 -0
- {kcwebs-1.87 → kcwebs-1.89}/kcwebs/tempfile/kcwebs/app/api/controller/index/common/__init__.py +0 -0
- {kcwebs-1.87 → kcwebs-1.89}/kcwebs/tempfile/kcwebs/app/api/controller/index/common/autoload.py +0 -0
- {kcwebs-1.87 → kcwebs-1.89}/kcwebs/tempfile/kcwebs/app/api/controller/index/common/html/include/static.html +0 -0
- {kcwebs-1.87 → kcwebs-1.89}/kcwebs/tempfile/kcwebs/app/api/controller/index/common/model.py +0 -0
- {kcwebs-1.87 → kcwebs-1.89}/kcwebs/tempfile/kcwebs/app/api/controller/index/index.py +0 -0
- {kcwebs-1.87 → kcwebs-1.89}/kcwebs/tempfile/kcwebs/app/api/controller/index/tpl/index/home.html +0 -0
- {kcwebs-1.87 → kcwebs-1.89}/kcwebs/tempfile/kcwebs/app/api/controller/index/tpl/index/index.html +0 -0
- {kcwebs-1.87 → kcwebs-1.89}/kcwebs/tempfile/kcwebs/app/common/__init__.py +0 -0
- {kcwebs-1.87 → kcwebs-1.89}/kcwebs/tempfile/kcwebs/app/common/autoload.py +0 -0
- {kcwebs-1.87 → kcwebs-1.89}/kcwebs/tempfile/kcwebs/app/common/html/include/static.html +0 -0
- {kcwebs-1.87 → kcwebs-1.89}/kcwebs/tempfile/kcwebs/app/common/model.py +0 -0
- {kcwebs-1.87 → kcwebs-1.89}/kcwebs/tempfile/kcwebs/app/config/__init__.py +0 -0
- {kcwebs-1.87 → kcwebs-1.89}/kcwebs/tempfile/kcwebs/app/config/app.py +0 -0
- {kcwebs-1.87 → kcwebs-1.89}/kcwebs/tempfile/kcwebs/app/config/database.py +0 -0
- {kcwebs-1.87 → kcwebs-1.89}/kcwebs/tempfile/kcwebs/app/config/other.py +0 -0
- {kcwebs-1.87 → kcwebs-1.89}/kcwebs/tempfile/kcwebs/app/config/redis.py +0 -0
- {kcwebs-1.87 → kcwebs-1.89}/kcwebs/tempfile/kcwebs/server.py +0 -0
- {kcwebs-1.87 → kcwebs-1.89}/kcwebs/utill/db/model.py +0 -0
- {kcwebs-1.87 → kcwebs-1.89}/kcwebs/utill/queues.py +0 -0
- {kcwebs-1.87 → kcwebs-1.89}/kcwebs.egg-info/dependency_links.txt +0 -0
- {kcwebs-1.87 → kcwebs-1.89}/kcwebs.egg-info/entry_points.txt +0 -0
- {kcwebs-1.87 → kcwebs-1.89}/kcwebs.egg-info/top_level.txt +0 -0
- {kcwebs-1.87 → kcwebs-1.89}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 1.2
|
|
2
2
|
Name: kcwebs
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.89
|
|
4
4
|
Summary: kcwebs作为web开发而设计的高性能框架
|
|
5
5
|
Home-page: https://docs.kwebapp.cn/index/index/2
|
|
6
6
|
Author: 百里-坤坤
|
|
@@ -9,5 +9,5 @@ Maintainer: 坤坤
|
|
|
9
9
|
Maintainer-email: fk1402936534@qq.com
|
|
10
10
|
License: MIT License
|
|
11
11
|
Description: kcwebs作为web开发而设计的高性能框架,采用全新的架构思想,注重易用性。遵循MIT开源许可协议发布,意味着个人和企业可以免费使用kcwebs,甚至允许把你基于kcwebs开发的应用开源或商业产品发布或销售。完整文档请访问:https://docs.kwebapp.cn/index/index/2
|
|
12
|
-
Keywords: kcwebs1.
|
|
12
|
+
Keywords: kcwebs1.89
|
|
13
13
|
Platform: UNKNOWN
|
|
@@ -1,22 +1,11 @@
|
|
|
1
1
|
from kcws.common import *
|
|
2
2
|
from .. import config
|
|
3
|
-
import random,urllib,asyncio,websockets,smtplib,datetime,chardet,copy
|
|
3
|
+
import random,urllib,asyncio,websockets,smtplib,datetime,chardet,copy
|
|
4
4
|
import kcwredis,kcwcache,kcwmysql
|
|
5
|
-
from email.mime.text import MIMEText
|
|
6
|
-
from email.utils import formataddr
|
|
7
|
-
from mako.template import Template as kcwsTemplate
|
|
8
|
-
from mako.lookup import TemplateLookup
|
|
9
|
-
from kcwebs.utill.db import sqlite as kcwssqlite
|
|
10
5
|
from kcwebs.utill.db import mongodb as kcwsmongodb
|
|
11
|
-
from dateutil.relativedelta import relativedelta
|
|
12
|
-
# from kcwebs.utill.http import Http
|
|
13
6
|
from kcwhttp.httpclass import Http
|
|
14
7
|
from kcwebs.utill.queues import Queues
|
|
15
8
|
from kcwebs.utill.db import model
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
9
|
redisobj=kcwredis.redis
|
|
21
10
|
python_version=platform.python_version()
|
|
22
11
|
if python_version[0:3]!='3.8':
|
|
@@ -291,7 +280,7 @@ class kcwebssocket:
|
|
|
291
280
|
# def start():
|
|
292
281
|
# kwebsocket=kcwebssocket()
|
|
293
282
|
# kwebsocket.start()
|
|
294
|
-
|
|
283
|
+
def before_request():pass
|
|
295
284
|
def timestampToDate(times,format="%Y-%m-%d %H:%M:%S"):
|
|
296
285
|
"""时间戳转换时间
|
|
297
286
|
|
|
@@ -314,6 +303,9 @@ def send_mail(user,text="邮件内容",theme="邮件主题",recNick="收件人
|
|
|
314
303
|
|
|
315
304
|
return Boolean类型
|
|
316
305
|
"""
|
|
306
|
+
from email.mime.text import MIMEText
|
|
307
|
+
from email.utils import formataddr
|
|
308
|
+
|
|
317
309
|
ret=True
|
|
318
310
|
if not theme:
|
|
319
311
|
theme=config.email['theme']
|
|
@@ -337,12 +329,9 @@ def Template(path,**context):
|
|
|
337
329
|
return Templates(path,**context)
|
|
338
330
|
def Templates(path,**context):
|
|
339
331
|
"模板渲染引擎函数,需要完整的模板目录文件"
|
|
332
|
+
from mako.template import Template as kcwsTemplate
|
|
333
|
+
from mako.lookup import TemplateLookup
|
|
340
334
|
lookup = TemplateLookup(directories=[''])
|
|
341
|
-
# body=''
|
|
342
|
-
# with open(path, 'r',encoding='utf-8') as f:
|
|
343
|
-
# contents=f.read()
|
|
344
|
-
# t=kcwsTemplate(contents,lookup=lookup,module_directory=config.cache['path']+"/Template")
|
|
345
|
-
# body=t.render(**context)
|
|
346
335
|
if (path[:1]=="/" or path[1:2]==":") and ('.html' in path or '.shtml' in path or '.htm' in path):
|
|
347
336
|
t=kcwsTemplate(filename=path,module_directory=config.cache['path']+"/Template",lookup=lookup)
|
|
348
337
|
else:
|
|
@@ -351,6 +340,8 @@ def Templates(path,**context):
|
|
|
351
340
|
return body
|
|
352
341
|
def kcwsTemp(contents,**context):
|
|
353
342
|
"模板渲染引擎函数,传字符串进来"
|
|
343
|
+
from mako.template import Template as kcwsTemplate
|
|
344
|
+
from mako.lookup import TemplateLookup
|
|
354
345
|
lookup = TemplateLookup(directories=[''])
|
|
355
346
|
t=kcwsTemplate(contents,lookup=lookup,module_directory=config.cache['path']+"/Template")
|
|
356
347
|
body=t.render(**context)
|
|
@@ -390,7 +381,8 @@ def sqlite(table=None,configss=None):
|
|
|
390
381
|
|
|
391
382
|
参数 configss 数据库配置 可以传数据库名字符串
|
|
392
383
|
"""
|
|
393
|
-
|
|
384
|
+
import kcwsqlite
|
|
385
|
+
dbs=kcwsqlite.sqlite #kcwssqlite.sqlite()
|
|
394
386
|
if table is None:
|
|
395
387
|
return dbs
|
|
396
388
|
elif configss:
|
|
@@ -471,6 +463,7 @@ def dateoperator(date,years=0,formats='%Y%m%d%H%M%S',months=0, days=0, hours=0,
|
|
|
471
463
|
|
|
472
464
|
return %Y%m%d%H%M%S
|
|
473
465
|
"""
|
|
466
|
+
from dateutil.relativedelta import relativedelta
|
|
474
467
|
formatss='%Y%m%d%H%M%S'
|
|
475
468
|
date=re.sub('[-年/月::日 时分秒]','',date)
|
|
476
469
|
if len(date) < 8:
|
|
@@ -495,7 +488,7 @@ def get_kcwebs_folder():
|
|
|
495
488
|
if not os.path.exists(get_kcwebs_folder()+"/pid/"):
|
|
496
489
|
os.makedirs(get_kcwebs_folder()+"/pid/", exist_ok=True)
|
|
497
490
|
def kill_all_kcwebs_pid(types='all'):
|
|
498
|
-
"""结束
|
|
491
|
+
"""结束kcwebs框架的所有子进程
|
|
499
492
|
|
|
500
493
|
types 可选 all 和 kcwebs
|
|
501
494
|
"""
|
|
@@ -757,6 +750,7 @@ class response:
|
|
|
757
750
|
|
|
758
751
|
ETag 缓存标识
|
|
759
752
|
"""
|
|
753
|
+
import filetype
|
|
760
754
|
status='200 ok'
|
|
761
755
|
header={"Cache-Control":"public, max-age=2592000"}
|
|
762
756
|
if isinstance(body,str):
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
|
-
import
|
|
2
|
+
import re
|
|
3
3
|
from bson.objectid import ObjectId
|
|
4
4
|
from kcwebs.config import mongo as mongodb
|
|
5
5
|
class mongo:
|
|
@@ -8,6 +8,7 @@ class mongo:
|
|
|
8
8
|
__dbobj=None
|
|
9
9
|
__tabobj=None
|
|
10
10
|
def __setconn(self):
|
|
11
|
+
import pymongo
|
|
11
12
|
if not self.__clientobj:
|
|
12
13
|
if self.__config['retryWrites']:
|
|
13
14
|
strs='mongodb://'+self.__config['host']+':'+self.__config['port']+'/'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 1.2
|
|
2
2
|
Name: kcwebs
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.89
|
|
4
4
|
Summary: kcwebs作为web开发而设计的高性能框架
|
|
5
5
|
Home-page: https://docs.kwebapp.cn/index/index/2
|
|
6
6
|
Author: 百里-坤坤
|
|
@@ -9,5 +9,5 @@ Maintainer: 坤坤
|
|
|
9
9
|
Maintainer-email: fk1402936534@qq.com
|
|
10
10
|
License: MIT License
|
|
11
11
|
Description: kcwebs作为web开发而设计的高性能框架,采用全新的架构思想,注重易用性。遵循MIT开源许可协议发布,意味着个人和企业可以免费使用kcwebs,甚至允许把你基于kcwebs开发的应用开源或商业产品发布或销售。完整文档请访问:https://docs.kwebapp.cn/index/index/2
|
|
12
|
-
Keywords: kcwebs1.
|
|
12
|
+
Keywords: kcwebs1.89
|
|
13
13
|
Platform: UNKNOWN
|
|
@@ -38,7 +38,6 @@ kcwebs/tempfile/kcwebs/app/config/redis.py
|
|
|
38
38
|
kcwebs/utill/queues.py
|
|
39
39
|
kcwebs/utill/db/model.py
|
|
40
40
|
kcwebs/utill/db/mongodb.py
|
|
41
|
-
kcwebs/utill/db/sqlite.py
|
|
42
41
|
kcwebs/common/__init__.py
|
|
43
42
|
kcwebs/common/autoload.py
|
|
44
43
|
kcwebs/common/session.py
|
|
@@ -68,5 +67,4 @@ kcwebs/tempfile/kcwebs/app/config/other.py
|
|
|
68
67
|
kcwebs/tempfile/kcwebs/app/config/redis.py
|
|
69
68
|
kcwebs/utill/queues.py
|
|
70
69
|
kcwebs/utill/db/model.py
|
|
71
|
-
kcwebs/utill/db/mongodb.py
|
|
72
|
-
kcwebs/utill/db/sqlite.py
|
|
70
|
+
kcwebs/utill/db/mongodb.py
|
|
@@ -50,7 +50,7 @@ def start():
|
|
|
50
50
|
packages = b,
|
|
51
51
|
|
|
52
52
|
|
|
53
|
-
install_requires = ['kcws>=1.
|
|
53
|
+
install_requires = ['kcws>=1.96','kcwmysql>=1.5','kcwsqlite>=1.1','kcwhttp>=1.3','python-dateutil==2.9.0',
|
|
54
54
|
'pymongo==3.10.0','Mako==1.3.6','six>=1.12.0',
|
|
55
55
|
# 'websockets==10.4',
|
|
56
56
|
'curl_cffi==0.9.0',
|
|
@@ -1,684 +0,0 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
|
-
from kcwebs.config import sqlite as sqliteconfig
|
|
3
|
-
import time,traceback,re
|
|
4
|
-
import random,sqlite3,os
|
|
5
|
-
class sqlite:
|
|
6
|
-
__config=sqliteconfig
|
|
7
|
-
__configt={}
|
|
8
|
-
__conn=None
|
|
9
|
-
__cursor=None
|
|
10
|
-
__sql=None
|
|
11
|
-
__sqls=None
|
|
12
|
-
def __close(self):
|
|
13
|
-
if self.__conn:
|
|
14
|
-
self.__cursor.close()
|
|
15
|
-
self.__conn.close()
|
|
16
|
-
self.__conn=None
|
|
17
|
-
pass
|
|
18
|
-
def __setconn(self):
|
|
19
|
-
config=self.__config
|
|
20
|
-
if self.__configt:
|
|
21
|
-
config=self.__configt
|
|
22
|
-
if not self.__conn:
|
|
23
|
-
try:
|
|
24
|
-
if '/' in config['db']:
|
|
25
|
-
self.__conn = sqlite3.connect(config['db'])
|
|
26
|
-
else:
|
|
27
|
-
self.__conn = sqlite3.connect(os.path.split(os.path.realpath(__file__))[0]+"/sqlitedata/"+config['db'])
|
|
28
|
-
except Exception as e:
|
|
29
|
-
raise Exception(e)
|
|
30
|
-
self.__cursor=self.__conn.cursor()
|
|
31
|
-
self.__configt={}
|
|
32
|
-
def __execute(self,typess='DQL'):
|
|
33
|
-
self.__setconn()
|
|
34
|
-
# print(self.__sql)
|
|
35
|
-
try:
|
|
36
|
-
res=self.__cursor.execute(self.__sql)
|
|
37
|
-
except Exception as e:
|
|
38
|
-
|
|
39
|
-
raise Exception(e)
|
|
40
|
-
else:
|
|
41
|
-
return res
|
|
42
|
-
def connect(self,config):
|
|
43
|
-
if isinstance(config,str):
|
|
44
|
-
self.__configt['db']=config
|
|
45
|
-
elif isinstance(config,dict):
|
|
46
|
-
if 'db' in config:
|
|
47
|
-
self.__configt['db']=config['db']
|
|
48
|
-
return self
|
|
49
|
-
__table=""
|
|
50
|
-
def table(self,table):
|
|
51
|
-
"""设置表名
|
|
52
|
-
|
|
53
|
-
参数 table:str 表名
|
|
54
|
-
"""
|
|
55
|
-
self.__table=table
|
|
56
|
-
return self
|
|
57
|
-
def query(self,sql):
|
|
58
|
-
self.__sql=sql
|
|
59
|
-
self.__execute(sql,'DQL')
|
|
60
|
-
self.__close()
|
|
61
|
-
def execute(self,sql):
|
|
62
|
-
self.__sql=sql
|
|
63
|
-
res=self.__execute('DML')
|
|
64
|
-
rowcount=res.rowcount
|
|
65
|
-
self.__close()
|
|
66
|
-
return rowcount
|
|
67
|
-
# def create_table(self):
|
|
68
|
-
# self.__sql=("CREATE TABLE "+self.__table+
|
|
69
|
-
# "(ID INT PRIMARY KEY NOT NULL,"+
|
|
70
|
-
# "NAME TEXT NOT NULL,"+
|
|
71
|
-
# "AGE INT NOT NULL,"+
|
|
72
|
-
# "ADDRESS CHAR(50),"+
|
|
73
|
-
# "SALARY REAL);")
|
|
74
|
-
# # print(self.__sql)
|
|
75
|
-
# # exit()
|
|
76
|
-
# self.execute(self.__sql)
|
|
77
|
-
def select(self,id=None):
|
|
78
|
-
"""select查询
|
|
79
|
-
|
|
80
|
-
返回 list(列表)
|
|
81
|
-
"""
|
|
82
|
-
if id :
|
|
83
|
-
self.__where="id=%d" % id
|
|
84
|
-
self.__setsql()
|
|
85
|
-
if self.__buildSql:
|
|
86
|
-
self.__sqls="("+self.__sql+")"
|
|
87
|
-
self.__None()
|
|
88
|
-
return self.__sqls
|
|
89
|
-
self.__execute()
|
|
90
|
-
description=self.__cursor.description #获取字段
|
|
91
|
-
result = self.__cursor.fetchall() #获取查询结果
|
|
92
|
-
self.__close()
|
|
93
|
-
lists=[]
|
|
94
|
-
data_dict=[]
|
|
95
|
-
for field in description:#获取字段
|
|
96
|
-
data_dict.append(field[0])
|
|
97
|
-
for k in result:
|
|
98
|
-
i=0
|
|
99
|
-
dicts={}
|
|
100
|
-
for j in k:
|
|
101
|
-
dicts[data_dict[i]]=j
|
|
102
|
-
i=i+1
|
|
103
|
-
lists.append(dicts)
|
|
104
|
-
self.__None(table=False)
|
|
105
|
-
return lists
|
|
106
|
-
def find(self,id=None):
|
|
107
|
-
"""查询一条记录
|
|
108
|
-
|
|
109
|
-
返回 字典
|
|
110
|
-
"""
|
|
111
|
-
if id :
|
|
112
|
-
self.__where="id=%s" % id
|
|
113
|
-
self.limit(1)
|
|
114
|
-
self.__setsql()
|
|
115
|
-
if self.__buildSql:
|
|
116
|
-
self.__sqls="("+self.__sql+")"
|
|
117
|
-
self.__None()
|
|
118
|
-
return self.__sqls
|
|
119
|
-
|
|
120
|
-
self.__execute()
|
|
121
|
-
description=self.__cursor.description #获取字段
|
|
122
|
-
result = self.__cursor.fetchall() #获取查询结果
|
|
123
|
-
self.__close()
|
|
124
|
-
data_dict=[]
|
|
125
|
-
for field in description:#获取字段
|
|
126
|
-
data_dict.append(field[0])
|
|
127
|
-
dicts={}
|
|
128
|
-
for k in result:
|
|
129
|
-
i=0
|
|
130
|
-
for j in k:
|
|
131
|
-
dicts[data_dict[i]]=j
|
|
132
|
-
i=i+1
|
|
133
|
-
self.__None(table=False)
|
|
134
|
-
return dicts
|
|
135
|
-
def getfield(self):
|
|
136
|
-
"""查询表字段
|
|
137
|
-
|
|
138
|
-
返回 字典
|
|
139
|
-
"""
|
|
140
|
-
self.limit(1)
|
|
141
|
-
self.__setsql()
|
|
142
|
-
if self.__buildSql:
|
|
143
|
-
self.__sqls="("+self.__sql+")"
|
|
144
|
-
self.__None()
|
|
145
|
-
return self.__sqls
|
|
146
|
-
|
|
147
|
-
self.__execute()
|
|
148
|
-
description=self.__cursor.description #获取字段
|
|
149
|
-
data_dict=[]
|
|
150
|
-
for field in description:#获取字段
|
|
151
|
-
data_dict.append(field[0])
|
|
152
|
-
return data_dict
|
|
153
|
-
def count(self,field="*"):
|
|
154
|
-
"""查询数量
|
|
155
|
-
|
|
156
|
-
返回 int 数字
|
|
157
|
-
"""
|
|
158
|
-
self.__field=field
|
|
159
|
-
self.__setsql('count')
|
|
160
|
-
if self.__buildSql:
|
|
161
|
-
self.__sqls="("+self.__sql+")"
|
|
162
|
-
return self.__sql
|
|
163
|
-
self.__execute()
|
|
164
|
-
result = self.__cursor.fetchall() #获取查询结果
|
|
165
|
-
self.__close()
|
|
166
|
-
cou=int(result[0][0])
|
|
167
|
-
self.__None(table=False)
|
|
168
|
-
return cou
|
|
169
|
-
def max(self,field):
|
|
170
|
-
"""查询某字段的最大值
|
|
171
|
-
|
|
172
|
-
返回 int 数字
|
|
173
|
-
"""
|
|
174
|
-
self.__field=field
|
|
175
|
-
self.__setsql('max')
|
|
176
|
-
if self.__buildSql:
|
|
177
|
-
self.__sqls="("+self.__sql+")"
|
|
178
|
-
return self.__sql
|
|
179
|
-
self.__execute()
|
|
180
|
-
result = self.__cursor.fetchall() #获取查询结果
|
|
181
|
-
self.__close()
|
|
182
|
-
cou=int(result[0][0])
|
|
183
|
-
self.__None(table=False)
|
|
184
|
-
return cou
|
|
185
|
-
def min(self,field):
|
|
186
|
-
"""查询某字段的最小值
|
|
187
|
-
|
|
188
|
-
返回 int 数字
|
|
189
|
-
"""
|
|
190
|
-
self.__field=field
|
|
191
|
-
self.__setsql('min')
|
|
192
|
-
if self.__buildSql:
|
|
193
|
-
self.__sqls="("+self.__sql+")"
|
|
194
|
-
return self.__sql
|
|
195
|
-
self.__execute()
|
|
196
|
-
result = self.__cursor.fetchall() #获取查询结果
|
|
197
|
-
self.__close()
|
|
198
|
-
cou=int(result[0][0])
|
|
199
|
-
self.__None(table=False)
|
|
200
|
-
return cou
|
|
201
|
-
def avg(self,field):
|
|
202
|
-
"""查询某字段的平均值
|
|
203
|
-
|
|
204
|
-
返回 int 数字
|
|
205
|
-
"""
|
|
206
|
-
self.__field=field
|
|
207
|
-
self.__setsql('avg')
|
|
208
|
-
if self.__buildSql:
|
|
209
|
-
self.__sqls="("+self.__sql+")"
|
|
210
|
-
return self.__sql
|
|
211
|
-
self.__execute()
|
|
212
|
-
result = self.__cursor.fetchall() #获取查询结果
|
|
213
|
-
self.__close()
|
|
214
|
-
cou=int(result[0][0])
|
|
215
|
-
self.__None(table=False)
|
|
216
|
-
return cou
|
|
217
|
-
def sum(self,field):
|
|
218
|
-
"""查询某字段之和
|
|
219
|
-
|
|
220
|
-
返回 int 数字
|
|
221
|
-
"""
|
|
222
|
-
self.__field=field
|
|
223
|
-
self.__setsql('sum')
|
|
224
|
-
if self.__buildSql:
|
|
225
|
-
self.__sqls="("+self.__sql+")"
|
|
226
|
-
return self.__sql
|
|
227
|
-
self.__execute()
|
|
228
|
-
result = self.__cursor.fetchall() #获取查询结果
|
|
229
|
-
self.__close()
|
|
230
|
-
cou=int(result[0][0])
|
|
231
|
-
self.__None(table=False)
|
|
232
|
-
return cou
|
|
233
|
-
def update(self,data,affair=False):
|
|
234
|
-
"""数据表更新
|
|
235
|
-
|
|
236
|
-
参数 data 要更新的内容 格式:{"name":"测试","age":20}
|
|
237
|
-
|
|
238
|
-
参数 affair 是否开启事务 True表示手动提交事务 False表示自动提交事务
|
|
239
|
-
"""
|
|
240
|
-
self.__setsql('update',data)
|
|
241
|
-
res=self.__execute('DML')
|
|
242
|
-
if affair==False and self.__startTrans==False:
|
|
243
|
-
self.commit()
|
|
244
|
-
rowcount=res.rowcount
|
|
245
|
-
self.__close()
|
|
246
|
-
self.__None(table=False)
|
|
247
|
-
return rowcount
|
|
248
|
-
def delete(self,affair=False):
|
|
249
|
-
"""数据表删除
|
|
250
|
-
|
|
251
|
-
参数 affair 是否开启事务 True表示手动提交事务 False表示自动提交事务
|
|
252
|
-
"""
|
|
253
|
-
self.__setsql('delete')
|
|
254
|
-
if self.__where:
|
|
255
|
-
res=self.__execute('DML')
|
|
256
|
-
else:
|
|
257
|
-
return 0
|
|
258
|
-
if affair==False and self.__startTrans==False:
|
|
259
|
-
self.commit()
|
|
260
|
-
rowcount=res.rowcount
|
|
261
|
-
self.__close()
|
|
262
|
-
self.__None(table=False)
|
|
263
|
-
return rowcount
|
|
264
|
-
def insert(self,dicts,affair=False):
|
|
265
|
-
"""插入数据库 单条插入或多条插入
|
|
266
|
-
|
|
267
|
-
参数 dicts 要插入的内容 单条格式:{"name":"测试","age":20} 。 多条格式:[{"name":"测试","age":20},{"name":"测试","age":20}]
|
|
268
|
-
|
|
269
|
-
参数 affair 是否开启事务 True表示手动提交事务 False表示自动提交事务
|
|
270
|
-
|
|
271
|
-
返回插入的数量
|
|
272
|
-
"""
|
|
273
|
-
self.__setsql('insert',dicts)
|
|
274
|
-
res=self.__execute('DML')
|
|
275
|
-
if affair==False and self.__startTrans==False:
|
|
276
|
-
self.commit()
|
|
277
|
-
rowcount=res.rowcount
|
|
278
|
-
self.__close()
|
|
279
|
-
self.__None(table=False)
|
|
280
|
-
return rowcount
|
|
281
|
-
__startTrans=False
|
|
282
|
-
def startTrans(self):
|
|
283
|
-
"开启事务,仅对 update方法、delete方法、install方法有效"
|
|
284
|
-
self.__startTrans=True
|
|
285
|
-
def commit(self):
|
|
286
|
-
"""事务提交
|
|
287
|
-
|
|
288
|
-
增删改后的任务进行提交
|
|
289
|
-
"""
|
|
290
|
-
self.__conn.commit()
|
|
291
|
-
def rollback(self):
|
|
292
|
-
"""事务回滚
|
|
293
|
-
|
|
294
|
-
增删改后的任务进行撤销
|
|
295
|
-
"""
|
|
296
|
-
self.__conn.rollback()
|
|
297
|
-
def getsql(self):
|
|
298
|
-
"""得到生成的sql语句"""
|
|
299
|
-
return self.__sql
|
|
300
|
-
__buildSql=None
|
|
301
|
-
def buildSql(self):
|
|
302
|
-
"""构造子查询"""
|
|
303
|
-
self.__buildSql=True
|
|
304
|
-
return self
|
|
305
|
-
def __None(self,table=True):
|
|
306
|
-
"清除所有赋值条件"
|
|
307
|
-
self.__lock=None
|
|
308
|
-
self.__distinct=None
|
|
309
|
-
self.__join=None
|
|
310
|
-
self.__joinstr=''
|
|
311
|
-
self.__alias=None
|
|
312
|
-
self.__having=None
|
|
313
|
-
self.__group=None
|
|
314
|
-
self.__group1=None
|
|
315
|
-
self.__order=None
|
|
316
|
-
self.__order1=None
|
|
317
|
-
self.__limit=None
|
|
318
|
-
self.__field="*"
|
|
319
|
-
self.__where=None
|
|
320
|
-
self.__wheres=()
|
|
321
|
-
self.__buildSql=None
|
|
322
|
-
if table:
|
|
323
|
-
self.__table=None
|
|
324
|
-
__where=None
|
|
325
|
-
__wheres=()
|
|
326
|
-
def where(self,where = None,*wheres):
|
|
327
|
-
"""设置过滤条件
|
|
328
|
-
|
|
329
|
-
传入方式:
|
|
330
|
-
"id",2 表示id='2'
|
|
331
|
-
|
|
332
|
-
"id","in",2,3,4,5,6,...表示 id in (2,3,4,5,6,...)
|
|
333
|
-
|
|
334
|
-
"id","in",[2,3,4,5,6,...]表示 id in (2,3,4,5,6,...)
|
|
335
|
-
|
|
336
|
-
[("id","gt",6000),"and",("name","like","%超")] 表示 ( id > "6000" and name LIKE "%超" )
|
|
337
|
-
|
|
338
|
-
"id","eq",1 表示 id = '1'
|
|
339
|
-
|
|
340
|
-
eq 等于
|
|
341
|
-
neq 不等于
|
|
342
|
-
gt 大于
|
|
343
|
-
egt 大于等于
|
|
344
|
-
lt 小于
|
|
345
|
-
elt 小于等于
|
|
346
|
-
like LIKE
|
|
347
|
-
"""
|
|
348
|
-
self.__where=where
|
|
349
|
-
self.__wheres=wheres
|
|
350
|
-
# print(len(self.__wheres))
|
|
351
|
-
return self
|
|
352
|
-
__field='*'
|
|
353
|
-
def field(self,field = "*"):
|
|
354
|
-
"""设置过滤显示条件
|
|
355
|
-
|
|
356
|
-
参数 field:str 字符串
|
|
357
|
-
"""
|
|
358
|
-
self.__field=field
|
|
359
|
-
return self
|
|
360
|
-
__limit=[]
|
|
361
|
-
def limit(self,offset, length = None):
|
|
362
|
-
"""设置查询数量
|
|
363
|
-
|
|
364
|
-
参数 offset:int 起始位置
|
|
365
|
-
|
|
366
|
-
参数 length:int 查询数量
|
|
367
|
-
"""
|
|
368
|
-
self.__limit=[offset,length]
|
|
369
|
-
return self
|
|
370
|
-
def page(self,pagenow=1, length = 20):
|
|
371
|
-
"""设置分页查询
|
|
372
|
-
|
|
373
|
-
参数 pagenow:int 页码
|
|
374
|
-
|
|
375
|
-
参数 length:int 查询数量
|
|
376
|
-
"""
|
|
377
|
-
offset=(pagenow-1)*length
|
|
378
|
-
self.__limit=[offset,length]
|
|
379
|
-
return self
|
|
380
|
-
__order=None
|
|
381
|
-
__order1=None
|
|
382
|
-
def order(self,strs=None,*strs1):
|
|
383
|
-
"""设置排序查询
|
|
384
|
-
|
|
385
|
-
传入方式:
|
|
386
|
-
|
|
387
|
-
"id desc"
|
|
388
|
-
|
|
389
|
-
"id",'name','appkey','asc'
|
|
390
|
-
|
|
391
|
-
"id",'name','appkey' 不包含asc或desc的情况下 默认是desc
|
|
392
|
-
|
|
393
|
-
['id','taskid',{"task_id":"desc"}]
|
|
394
|
-
"""
|
|
395
|
-
self.__order=strs
|
|
396
|
-
self.__order1=strs1
|
|
397
|
-
return self
|
|
398
|
-
__group=None
|
|
399
|
-
__group1=None
|
|
400
|
-
def group(self,strs=None,*strs1):
|
|
401
|
-
"""设置分组查询
|
|
402
|
-
|
|
403
|
-
传入方式:
|
|
404
|
-
|
|
405
|
-
"id,name"
|
|
406
|
-
|
|
407
|
-
"id","name"
|
|
408
|
-
"""
|
|
409
|
-
self.__group=strs
|
|
410
|
-
self.__group1=strs1
|
|
411
|
-
return self
|
|
412
|
-
__having=None
|
|
413
|
-
def having(self,strs=None):
|
|
414
|
-
"""用于配合group方法完成从分组的结果中筛选(通常是聚合条件)数据
|
|
415
|
-
|
|
416
|
-
参数 strs:string 如:"count(time)>3"
|
|
417
|
-
"""
|
|
418
|
-
self.__having=strs
|
|
419
|
-
return self
|
|
420
|
-
|
|
421
|
-
__alias=None
|
|
422
|
-
def alias(self,strs=None):
|
|
423
|
-
"""用于设置当前数据表的别名,便于使用其他的连贯操作例如join方法等。
|
|
424
|
-
|
|
425
|
-
参数 strs:string 默认当前表作为别名
|
|
426
|
-
"""
|
|
427
|
-
if strs:
|
|
428
|
-
self.__alias=strs
|
|
429
|
-
else:
|
|
430
|
-
self.__alias=self.__table
|
|
431
|
-
return self
|
|
432
|
-
__join=None
|
|
433
|
-
__joinstr=''
|
|
434
|
-
def join(self,strs,on=None,types='INNER'):
|
|
435
|
-
"""用于根据两个或多个表中的列之间的关系,从这些表中查询数据
|
|
436
|
-
|
|
437
|
-
参数 strs string 如:"test t1" test表设置别名t1
|
|
438
|
-
|
|
439
|
-
参数 on string 如:"t1.id=t2.pid" 设置连接条件
|
|
440
|
-
|
|
441
|
-
参数 types 支持INNER、LEFT、RIGHT、FULL 默认INNER
|
|
442
|
-
|
|
443
|
-
"""
|
|
444
|
-
joinstr=''
|
|
445
|
-
if strs and on:
|
|
446
|
-
joinstr=joinstr+types+" JOIN "+strs+" ON "+on+" "
|
|
447
|
-
if joinstr:
|
|
448
|
-
self.__joinstr=self.__joinstr+joinstr
|
|
449
|
-
return self
|
|
450
|
-
__distinct=None
|
|
451
|
-
def distinct(self,bools=None):
|
|
452
|
-
"用于返回唯一不同的值,配合field方法使用生效,消除所有重复的记录,并只获取唯一一次记录。"
|
|
453
|
-
self.__distinct=bools
|
|
454
|
-
return self
|
|
455
|
-
__lock=None
|
|
456
|
-
def lock(self,strs=None):
|
|
457
|
-
"""用于数据库的锁机制,在查询或者执行操作的时候使用 (暂未实现)
|
|
458
|
-
|
|
459
|
-
排他锁 (Exclusive lock)
|
|
460
|
-
|
|
461
|
-
共享锁 (Shared lock)
|
|
462
|
-
|
|
463
|
-
参数 strs 如:True表示自动在生成的SQL语句最后加上FOR UPDATE,
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
"""
|
|
467
|
-
# self.__lock=strs
|
|
468
|
-
return self
|
|
469
|
-
def __setsql(self,types=None,data = {}):
|
|
470
|
-
"""生成sql语句"""
|
|
471
|
-
if types==None:
|
|
472
|
-
self.__sql="SELECT"
|
|
473
|
-
if self.__distinct and self.__field:
|
|
474
|
-
self.__sql=self.__sql+" DISTINCT"
|
|
475
|
-
if self.__alias:
|
|
476
|
-
self.__sql=self.__sql+" %s FROM %s %s" % (self.__field,self.__table,self.__alias)
|
|
477
|
-
else:
|
|
478
|
-
self.__sql=self.__sql+" %s FROM %s" % (self.__field,self.__table)
|
|
479
|
-
elif types=='count':
|
|
480
|
-
self.__sql="SELECT COUNT(%s) FROM %s" % (self.__field,self.__table)
|
|
481
|
-
elif types=='max':
|
|
482
|
-
self.__sql="SELECT MAX(%s) FROM %s" % (self.__field,self.__table)
|
|
483
|
-
elif types=='min':
|
|
484
|
-
self.__sql="SELECT MIN(%s) FROM %s" % (self.__field,self.__table)
|
|
485
|
-
elif types=='avg':
|
|
486
|
-
self.__sql="SELECT AVG(%s) FROM %s" % (self.__field,self.__table)
|
|
487
|
-
elif types=='sum':
|
|
488
|
-
self.__sql="SELECT SUM(%s) FROM %s" % (self.__field,self.__table)
|
|
489
|
-
elif types=='update':
|
|
490
|
-
strs=''
|
|
491
|
-
for k in data:
|
|
492
|
-
if isinstance(data[k],str):
|
|
493
|
-
strs=strs+" %s = '%s' ," % (k,self.escape_string(data[k]))
|
|
494
|
-
else:
|
|
495
|
-
strs=strs+" %s = %s ," % (k,data[k])
|
|
496
|
-
strs=strs[:-1]
|
|
497
|
-
self.__sql="UPDATE %s SET %s" % (self.__table,strs)
|
|
498
|
-
# print(self.__sql)
|
|
499
|
-
elif types=='delete':
|
|
500
|
-
self.__sql="DELETE FROM %s" % (self.__table)
|
|
501
|
-
elif types=='insert':
|
|
502
|
-
if isinstance(data,dict):
|
|
503
|
-
strs=''
|
|
504
|
-
val=''
|
|
505
|
-
for k in data:
|
|
506
|
-
strs=strs+"%s," % k
|
|
507
|
-
if isinstance(data[k],str):
|
|
508
|
-
val=val+"'%s'," % self.escape_string(data[k])
|
|
509
|
-
else:
|
|
510
|
-
val=val+"%s," % data[k]
|
|
511
|
-
strs=strs[:-1]
|
|
512
|
-
val=val[:-1]
|
|
513
|
-
self.__sql="INSERT INTO "+str(self.__table)+" ("+strs+") VALUES ("+val+")"
|
|
514
|
-
# print(self.__sql)
|
|
515
|
-
elif isinstance(data,list):
|
|
516
|
-
strs=''
|
|
517
|
-
val='('
|
|
518
|
-
for k in data[0]:
|
|
519
|
-
strs=strs+" , "+k
|
|
520
|
-
for k in data:
|
|
521
|
-
for j in k:
|
|
522
|
-
if isinstance(k[j],str):
|
|
523
|
-
val=val+"'"+str(k[j])+"',"
|
|
524
|
-
else:
|
|
525
|
-
val=val+str(k[j])+","
|
|
526
|
-
val=val[:-1]
|
|
527
|
-
val=val+"),("
|
|
528
|
-
val=val[:-2]
|
|
529
|
-
self.__sql="INSERT INTO "+str(self.__table)+" ("+strs[3:]+") VALUES "+val
|
|
530
|
-
|
|
531
|
-
if self.__joinstr:
|
|
532
|
-
# print(self.__sql)
|
|
533
|
-
self.__sql=self.__sql+" "+self.__joinstr
|
|
534
|
-
if self.__where:
|
|
535
|
-
if isinstance(self.__where,str):
|
|
536
|
-
if self.__wheres:
|
|
537
|
-
if len(self.__wheres) == 2:
|
|
538
|
-
if isinstance(self.__wheres[1],list):
|
|
539
|
-
self.__sql=self.__sql + " WHERE %s %s (" % (self.__where,self.__operator(self.__wheres[0]))
|
|
540
|
-
for k in self.__wheres[1]:
|
|
541
|
-
self.__sql=self.__sql+str(k)+","
|
|
542
|
-
self.__sql=self.__sql[:-1]+")"
|
|
543
|
-
else:
|
|
544
|
-
self.__sql=self.__sql + " WHERE %s %s '%s'" % (self.__where,self.__operator(self.__wheres[0]),self.__wheres[1])
|
|
545
|
-
elif len(self.__wheres) > 2:
|
|
546
|
-
if self.__wheres[0]=='in':
|
|
547
|
-
strs=str(self.__wheres[1])
|
|
548
|
-
i=0
|
|
549
|
-
for k in self.__wheres:
|
|
550
|
-
if i > 1:
|
|
551
|
-
strs=strs+","+str(k)
|
|
552
|
-
i=i+1
|
|
553
|
-
self.__sql=self.__sql + " WHERE %s in (%s)" % (self.__where,strs)
|
|
554
|
-
else:
|
|
555
|
-
self.__sql=self.__sql + " WHERE %s = '%s'" % (self.__where,self.__wheres[0])
|
|
556
|
-
else:
|
|
557
|
-
self.__sql=self.__sql + " WHERE %s" % self.__where
|
|
558
|
-
elif isinstance(self.__where,list):
|
|
559
|
-
self.__sql=self.__sql + " WHERE %s" % self.__listTrans()
|
|
560
|
-
else:
|
|
561
|
-
print("参数where类型错误",type(self.__where),self.__where)
|
|
562
|
-
if self.__order:
|
|
563
|
-
s=''
|
|
564
|
-
if isinstance(self.__order,list):
|
|
565
|
-
for strs in self.__order:
|
|
566
|
-
if isinstance(strs,str):
|
|
567
|
-
s=s+strs+","
|
|
568
|
-
else:
|
|
569
|
-
pass
|
|
570
|
-
for key in strs:
|
|
571
|
-
s=s+key+" "+strs[key]
|
|
572
|
-
s=s+","
|
|
573
|
-
s=s[:-1]
|
|
574
|
-
if isinstance(self.__order,str):
|
|
575
|
-
if self.__order1:
|
|
576
|
-
if len(self.__order1) > 1:
|
|
577
|
-
if self.__order1[len(self.__order1)-1] == 'desc' or self.__order1[len(self.__order1)-1] == 'asc':
|
|
578
|
-
i=0
|
|
579
|
-
while i<len(self.__order1)-1:
|
|
580
|
-
s=s+self.__order1[i]+","
|
|
581
|
-
i=i+1
|
|
582
|
-
s=s[:-1]+" "+self.__order1[len(self.__order1)-1]
|
|
583
|
-
else:
|
|
584
|
-
for key in self.__order1:
|
|
585
|
-
s=s+key+","
|
|
586
|
-
s=s[:-1]
|
|
587
|
-
s=s+" asc"
|
|
588
|
-
s=self.__order+","+s
|
|
589
|
-
else:
|
|
590
|
-
s=s[:-1]+self.__order1[0]
|
|
591
|
-
s=self.__order+" "+s
|
|
592
|
-
else:
|
|
593
|
-
s=self.__order
|
|
594
|
-
# print(s)
|
|
595
|
-
self.__sql=self.__sql+" ORDER BY "+s
|
|
596
|
-
if self.__group:
|
|
597
|
-
s=self.__group
|
|
598
|
-
if self.__group1:
|
|
599
|
-
for key in self.__group1:
|
|
600
|
-
s=s+","+key
|
|
601
|
-
self.__sql=self.__sql+" GROUP BY "+s
|
|
602
|
-
if self.__having:
|
|
603
|
-
self.__sql=self.__sql+" HAVING "+self.__having
|
|
604
|
-
if self.__limit:
|
|
605
|
-
if self.__limit[1]:
|
|
606
|
-
self.__sql=self.__sql+" LIMIT %d,%d" % (self.__limit[0],self.__limit[1])
|
|
607
|
-
else:
|
|
608
|
-
self.__sql=self.__sql+" LIMIT %d" % self.__limit[0]
|
|
609
|
-
if self.__lock:
|
|
610
|
-
if isinstance(self.__lock,str):
|
|
611
|
-
self.__sql=self.__sql+" "+self.__lock
|
|
612
|
-
else:
|
|
613
|
-
self.__sql=self.__sql+' Exclusive lock'
|
|
614
|
-
# print(self.__sql)
|
|
615
|
-
def __listTrans(self):
|
|
616
|
-
"""列表转换sql表达式
|
|
617
|
-
返回 字符串
|
|
618
|
-
"""
|
|
619
|
-
strs=''
|
|
620
|
-
#[('id', 'eq', '1'), 'or', ('id', 'eq', '2')]
|
|
621
|
-
for k in self.__where:
|
|
622
|
-
if isinstance(k,tuple):
|
|
623
|
-
t=0
|
|
624
|
-
for j in k:
|
|
625
|
-
if t==0:
|
|
626
|
-
strs=strs+' '+str(j)+' '
|
|
627
|
-
elif t==1:
|
|
628
|
-
strs=strs+self.__operator(j)
|
|
629
|
-
if t==2:
|
|
630
|
-
strs=strs+' "'+str(j)+'" '
|
|
631
|
-
t=t+1
|
|
632
|
-
elif isinstance(k,str):
|
|
633
|
-
strs=strs+k
|
|
634
|
-
return "("+strs+")"
|
|
635
|
-
def __operator(self,strs):
|
|
636
|
-
"""运算符转换
|
|
637
|
-
参数 strs 待转的字符串
|
|
638
|
-
返回 已转换的运算符
|
|
639
|
-
|
|
640
|
-
符号定义
|
|
641
|
-
eq 等于
|
|
642
|
-
neq 不等于
|
|
643
|
-
gt 大于
|
|
644
|
-
egt 大于等于
|
|
645
|
-
lt 小于
|
|
646
|
-
elt 小于等于
|
|
647
|
-
like LIKE
|
|
648
|
-
"""
|
|
649
|
-
strss=strs.upper()
|
|
650
|
-
if strss == 'EQ':
|
|
651
|
-
k='='
|
|
652
|
-
elif strss == 'NEQ':
|
|
653
|
-
k='<>'
|
|
654
|
-
elif strss == 'GT':
|
|
655
|
-
k='>'
|
|
656
|
-
elif strss == 'EGT':
|
|
657
|
-
k='>='
|
|
658
|
-
elif strss == 'LT':
|
|
659
|
-
k='<'
|
|
660
|
-
elif strss == 'ELT':
|
|
661
|
-
k='<='
|
|
662
|
-
elif strss == 'LIKE':
|
|
663
|
-
k='LIKE'
|
|
664
|
-
else:
|
|
665
|
-
k=strss
|
|
666
|
-
return k
|
|
667
|
-
def escape_string(self,value):
|
|
668
|
-
"""sqlite3 字符串转义
|
|
669
|
-
|
|
670
|
-
Value 字符串
|
|
671
|
-
"""
|
|
672
|
-
# value = value.replace('/', '//')
|
|
673
|
-
value = value.replace("'", "''")
|
|
674
|
-
# value = value.replace('[', '/[')
|
|
675
|
-
# value = value.replace(']', '/]')
|
|
676
|
-
# value = value.replace('%', '/%')
|
|
677
|
-
# value = value.replace('&', '/&')
|
|
678
|
-
# value = value.replace('_', '/_')
|
|
679
|
-
# value = value.replace('(', '/(')
|
|
680
|
-
# value = value.replace(')', '/)')
|
|
681
|
-
return value
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kcwebs-1.87 → kcwebs-1.89}/kcwebs/tempfile/kcwebs/app/api/controller/index/common/__init__.py
RENAMED
|
File without changes
|
{kcwebs-1.87 → kcwebs-1.89}/kcwebs/tempfile/kcwebs/app/api/controller/index/common/autoload.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kcwebs-1.87 → kcwebs-1.89}/kcwebs/tempfile/kcwebs/app/api/controller/index/tpl/index/home.html
RENAMED
|
File without changes
|
{kcwebs-1.87 → kcwebs-1.89}/kcwebs/tempfile/kcwebs/app/api/controller/index/tpl/index/index.html
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|