kcwebs 1.88__tar.gz → 1.90__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.88 → kcwebs-1.90}/PKG-INFO +2 -2
- {kcwebs-1.88 → kcwebs-1.90}/kcwebs/__init__.py +1 -1
- {kcwebs-1.88 → kcwebs-1.90}/kcwebs/common/autoload.py +2 -2
- {kcwebs-1.88 → kcwebs-1.90}/kcwebs/utill/queues.py +29 -29
- {kcwebs-1.88 → kcwebs-1.90}/kcwebs.egg-info/PKG-INFO +2 -2
- {kcwebs-1.88 → kcwebs-1.90}/kcwebs.egg-info/SOURCES.txt +1 -3
- {kcwebs-1.88 → kcwebs-1.90}/kcwebs.egg-info/requires.txt +1 -0
- {kcwebs-1.88 → kcwebs-1.90}/setup.py +1 -1
- kcwebs-1.88/kcwebs/utill/db/sqlite.py +0 -684
- {kcwebs-1.88 → kcwebs-1.90}/README.md +0 -0
- {kcwebs-1.88 → kcwebs-1.90}/kcwebs/common/__init__.py +0 -0
- {kcwebs-1.88 → kcwebs-1.90}/kcwebs/common/session.py +0 -0
- {kcwebs-1.88 → kcwebs-1.90}/kcwebs/config/__init__.py +0 -0
- {kcwebs-1.88 → kcwebs-1.90}/kcwebs/kcwebs.py +0 -0
- {kcwebs-1.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/app/__init__.py +0 -0
- {kcwebs-1.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/app/api/__init__.py +0 -0
- {kcwebs-1.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/app/api/common/__init__.py +0 -0
- {kcwebs-1.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/app/api/common/autoload.py +0 -0
- {kcwebs-1.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/app/api/controller/__init__.py +0 -0
- {kcwebs-1.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/app/api/controller/index/__init__.py +0 -0
- {kcwebs-1.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/app/api/controller/index/common/__init__.py +0 -0
- {kcwebs-1.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/app/api/controller/index/common/autoload.py +0 -0
- {kcwebs-1.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/app/api/controller/index/common/html/include/static.html +0 -0
- {kcwebs-1.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/app/api/controller/index/common/model.py +0 -0
- {kcwebs-1.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/app/api/controller/index/index.py +0 -0
- {kcwebs-1.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/app/api/controller/index/tpl/index/home.html +0 -0
- {kcwebs-1.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/app/api/controller/index/tpl/index/index.html +0 -0
- {kcwebs-1.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/app/common/__init__.py +0 -0
- {kcwebs-1.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/app/common/autoload.py +0 -0
- {kcwebs-1.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/app/common/html/include/static.html +0 -0
- {kcwebs-1.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/app/common/model.py +0 -0
- {kcwebs-1.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/app/config/__init__.py +0 -0
- {kcwebs-1.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/app/config/app.py +0 -0
- {kcwebs-1.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/app/config/database.py +0 -0
- {kcwebs-1.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/app/config/other.py +0 -0
- {kcwebs-1.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/app/config/redis.py +0 -0
- {kcwebs-1.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/server.py +0 -0
- {kcwebs-1.88 → kcwebs-1.90}/kcwebs/utill/db/model.py +0 -0
- {kcwebs-1.88 → kcwebs-1.90}/kcwebs/utill/db/mongodb.py +0 -0
- {kcwebs-1.88 → kcwebs-1.90}/kcwebs.egg-info/dependency_links.txt +0 -0
- {kcwebs-1.88 → kcwebs-1.90}/kcwebs.egg-info/entry_points.txt +0 -0
- {kcwebs-1.88 → kcwebs-1.90}/kcwebs.egg-info/top_level.txt +0 -0
- {kcwebs-1.88 → kcwebs-1.90}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 1.2
|
|
2
2
|
Name: kcwebs
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.90
|
|
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.90
|
|
13
13
|
Platform: UNKNOWN
|
|
@@ -2,7 +2,6 @@ from kcws.common import *
|
|
|
2
2
|
from .. import config
|
|
3
3
|
import random,urllib,asyncio,websockets,smtplib,datetime,chardet,copy
|
|
4
4
|
import kcwredis,kcwcache,kcwmysql
|
|
5
|
-
from kcwebs.utill.db import sqlite as kcwssqlite
|
|
6
5
|
from kcwebs.utill.db import mongodb as kcwsmongodb
|
|
7
6
|
from kcwhttp.httpclass import Http
|
|
8
7
|
from kcwebs.utill.queues import Queues
|
|
@@ -382,7 +381,8 @@ def sqlite(table=None,configss=None):
|
|
|
382
381
|
|
|
383
382
|
参数 configss 数据库配置 可以传数据库名字符串
|
|
384
383
|
"""
|
|
385
|
-
|
|
384
|
+
import kcwsqlite
|
|
385
|
+
dbs=kcwsqlite.sqlite #kcwssqlite.sqlite()
|
|
386
386
|
if table is None:
|
|
387
387
|
return dbs
|
|
388
388
|
elif configss:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from queue import Queue
|
|
2
2
|
from .db import model
|
|
3
|
-
from .db import sqlite as kcwssqlite
|
|
4
|
-
import threading,time,os,hashlib,random,traceback,multiprocessing
|
|
3
|
+
# from .db import sqlite as kcwssqlite
|
|
4
|
+
import threading,time,os,hashlib,random,traceback,multiprocessing,kcwsqlite
|
|
5
5
|
queuesdbpath=os.path.split(os.path.realpath(__file__))[0]+"/Queues"
|
|
6
6
|
class model_kcwebs_task(model.model):
|
|
7
7
|
"任务"
|
|
@@ -32,7 +32,7 @@ class Queues():
|
|
|
32
32
|
model_kcwebs_tasks=model_kcwebs_task()
|
|
33
33
|
model_kcwebs_tasks.create_table()
|
|
34
34
|
try:
|
|
35
|
-
|
|
35
|
+
kcwsqlite.sqlite.connect(queuesdbpath).table("model_kcwebs_queues").find()
|
|
36
36
|
except:
|
|
37
37
|
model_kcwebs_tasks=model_kcwebs_task()
|
|
38
38
|
model_kcwebs_tasks.create_table()
|
|
@@ -45,7 +45,7 @@ class Queues():
|
|
|
45
45
|
model_kcwebs_tasks=model_kcwebs_task()
|
|
46
46
|
model_kcwebs_tasks.create_table()
|
|
47
47
|
try:
|
|
48
|
-
|
|
48
|
+
kcwsqlite.sqlite.connect(queuesdbpath).table("model_kcwebs_queues").find()
|
|
49
49
|
except:
|
|
50
50
|
model_kcwebs_tasks=model_kcwebs_task()
|
|
51
51
|
model_kcwebs_tasks.create_table()
|
|
@@ -55,8 +55,8 @@ class Queues():
|
|
|
55
55
|
t.start()
|
|
56
56
|
def _messagequeueprocess(processglobalqueue):
|
|
57
57
|
"""不支持外部调用"""
|
|
58
|
-
|
|
59
|
-
|
|
58
|
+
kcwsqlite.sqlite.connect(queuesdbpath).table("model_kcwebs_queues").where("code=2 and updtime<"+str(int(time.time())-86400*7)).delete()
|
|
59
|
+
kcwsqlite.sqlite.connect(queuesdbpath).table("model_kcwebs_queues").where("code=3 and updtime<"+str(int(time.time())-1200)).delete()
|
|
60
60
|
pid = os.getpid()
|
|
61
61
|
pdfile=os.path.split(os.path.realpath(__file__))[0][:-6]+'/pid/queues_pid_'+str(pid) #pid存放文件
|
|
62
62
|
f=open(pdfile,'w')
|
|
@@ -65,62 +65,62 @@ class Queues():
|
|
|
65
65
|
while True:
|
|
66
66
|
if not processglobalqueue.empty():
|
|
67
67
|
value=processglobalqueue.get()
|
|
68
|
-
|
|
68
|
+
kcwsqlite.sqlite.connect(queuesdbpath).table("model_kcwebs_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":3,"error":""})
|
|
69
69
|
if value['args']:
|
|
70
70
|
try:
|
|
71
71
|
value['target'](*value['args'])
|
|
72
72
|
except:
|
|
73
|
-
|
|
73
|
+
kcwsqlite.sqlite.connect(queuesdbpath).table("model_kcwebs_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":1,'endtime':int(time.time()),'updtime':int(time.time()),"error":str(traceback.format_exc())})
|
|
74
74
|
else:
|
|
75
|
-
|
|
75
|
+
kcwsqlite.sqlite.connect(queuesdbpath).table("model_kcwebs_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":4,"start":100,'endtime':int(time.time()),'updtime':int(time.time())})
|
|
76
76
|
else:
|
|
77
77
|
try:
|
|
78
78
|
value['target']()
|
|
79
79
|
except:
|
|
80
|
-
|
|
80
|
+
kcwsqlite.sqlite.connect(queuesdbpath).table("model_kcwebs_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":1,'endtime':int(time.time()),'updtime':int(time.time()),"error":str(traceback.format_exc())})
|
|
81
81
|
else:
|
|
82
|
-
|
|
82
|
+
kcwsqlite.sqlite.connect(queuesdbpath).table("model_kcwebs_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":4,"start":100,'endtime':int(time.time()),'updtime':int(time.time())})
|
|
83
83
|
else:
|
|
84
84
|
time.sleep(0.01)
|
|
85
85
|
def __messagequeue():
|
|
86
|
-
|
|
87
|
-
|
|
86
|
+
kcwsqlite.sqlite.connect(queuesdbpath).table("model_kcwebs_queues").where("code=2 and updtime<"+str(int(time.time())-86400*7)).delete()
|
|
87
|
+
kcwsqlite.sqlite.connect(queuesdbpath).table("model_kcwebs_queues").where("code=3 and updtime<"+str(int(time.time())-1200)).delete()
|
|
88
88
|
while True:
|
|
89
89
|
if not Queues.__globalqueue.empty():
|
|
90
90
|
value=Queues.__globalqueue.get()
|
|
91
|
-
|
|
91
|
+
kcwsqlite.sqlite.connect(queuesdbpath).table("model_kcwebs_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":3,"error":""})
|
|
92
92
|
if value['args']:
|
|
93
93
|
try:
|
|
94
94
|
value['target'](*value['args'])
|
|
95
95
|
except:
|
|
96
|
-
|
|
96
|
+
kcwsqlite.sqlite.connect(queuesdbpath).table("model_kcwebs_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":1,'endtime':int(time.time()),'updtime':int(time.time()),"error":str(traceback.format_exc())})
|
|
97
97
|
else:
|
|
98
|
-
|
|
98
|
+
kcwsqlite.sqlite.connect(queuesdbpath).table("model_kcwebs_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":4,"start":100,'endtime':int(time.time()),'updtime':int(time.time())})
|
|
99
99
|
else:
|
|
100
100
|
try:
|
|
101
101
|
value['target']()
|
|
102
102
|
except:
|
|
103
|
-
|
|
103
|
+
kcwsqlite.sqlite.connect(queuesdbpath).table("model_kcwebs_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":1,'endtime':int(time.time()),'updtime':int(time.time()),"error":str(traceback.format_exc())})
|
|
104
104
|
else:
|
|
105
|
-
|
|
105
|
+
kcwsqlite.sqlite.connect(queuesdbpath).table("model_kcwebs_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":4,"start":100,'endtime':int(time.time()),'updtime':int(time.time())})
|
|
106
106
|
else:
|
|
107
107
|
time.sleep(0.01)
|
|
108
108
|
def delhist():
|
|
109
109
|
"""清除任务历史记录(包括 成功的 失败的 已完成的)"""
|
|
110
|
-
return
|
|
110
|
+
return kcwsqlite.sqlite.connect(queuesdbpath).table("model_kcwebs_queues").where("code","in",0,1,4).delete()
|
|
111
111
|
def delwhere(where):
|
|
112
112
|
"通过where条件删除 (不推荐使用)"
|
|
113
|
-
return
|
|
113
|
+
return kcwsqlite.sqlite.connect(queuesdbpath).table("model_kcwebs_queues").where(where).delete()
|
|
114
114
|
def seltitle(title):
|
|
115
115
|
"通过标题查询 (不推荐使用)"
|
|
116
116
|
try:
|
|
117
|
-
return
|
|
117
|
+
return kcwsqlite.sqlite.connect(queuesdbpath).table("model_kcwebs_queues").where("title='"+title+"'").select()
|
|
118
118
|
except:
|
|
119
119
|
return ''
|
|
120
120
|
def setfield(taskid,key,value):
|
|
121
121
|
"""设置指定字段(不建议使用)"""
|
|
122
122
|
try:
|
|
123
|
-
return
|
|
123
|
+
return kcwsqlite.sqlite.connect(queuesdbpath).table("model_kcwebs_queues").where("taskid",taskid).update({key:value})
|
|
124
124
|
except:
|
|
125
125
|
return False
|
|
126
126
|
def setstart(taskid,start=0.001,describes=None):
|
|
@@ -129,7 +129,7 @@ class Queues():
|
|
|
129
129
|
start 支持0.001到10
|
|
130
130
|
"""
|
|
131
131
|
if start>=0.001 and start<=10:
|
|
132
|
-
arr=
|
|
132
|
+
arr=kcwsqlite.sqlite.connect(queuesdbpath).table("model_kcwebs_queues").where("taskid",taskid).find()
|
|
133
133
|
if arr:
|
|
134
134
|
start+=round(float(arr['start']),3)
|
|
135
135
|
if start>=0.01 and start <=99.99:
|
|
@@ -139,7 +139,7 @@ class Queues():
|
|
|
139
139
|
upddate={"start":start,'starts':starts,'updtime':int(time.time())}
|
|
140
140
|
if describes:
|
|
141
141
|
upddate['describes']=describes
|
|
142
|
-
|
|
142
|
+
kcwsqlite.sqlite.connect(queuesdbpath).table("model_kcwebs_queues").where("taskid",taskid).update(upddate)
|
|
143
143
|
return True
|
|
144
144
|
else:
|
|
145
145
|
return False
|
|
@@ -184,7 +184,7 @@ class Queues():
|
|
|
184
184
|
updtime=ttt
|
|
185
185
|
task={"taskid":taskid,"title":title,"describes":describes,"code":2,"msg":msg,"error":"","start":start,"end":end,"addtime":ttt,'starts':0,'endtime':0,'updtime':updtime}
|
|
186
186
|
key={"target":target,"args":args,"task":task}
|
|
187
|
-
|
|
187
|
+
kcwsqlite.sqlite.connect(queuesdbpath).table("model_kcwebs_queues").insert(task)
|
|
188
188
|
if types=='process':
|
|
189
189
|
Queues.__processglobalqueue.put(key)
|
|
190
190
|
else:
|
|
@@ -201,8 +201,8 @@ class Queues():
|
|
|
201
201
|
model_kcwebs_tasks=model_kcwebs_task()
|
|
202
202
|
model_kcwebs_tasks.create_table()
|
|
203
203
|
try:
|
|
204
|
-
lists=
|
|
205
|
-
count=
|
|
204
|
+
lists=kcwsqlite.sqlite.connect(queuesdbpath).where(where).table("model_kcwebs_queues").order("id desc").page(pagenow,pagesize).select()
|
|
205
|
+
count=kcwsqlite.sqlite.connect(queuesdbpath).where(where).table("model_kcwebs_queues").count()
|
|
206
206
|
return lists,count
|
|
207
207
|
except:
|
|
208
208
|
model_kcwebs_tasks=model_kcwebs_task()
|
|
@@ -215,7 +215,7 @@ class Queues():
|
|
|
215
215
|
|
|
216
216
|
return dict
|
|
217
217
|
"""
|
|
218
|
-
arr=
|
|
218
|
+
arr=kcwsqlite.sqlite.connect(queuesdbpath).table("model_kcwebs_queues").where("taskid",taskid).find()
|
|
219
219
|
if arr:
|
|
220
220
|
arr['start']=float(arr['start'])
|
|
221
221
|
dqsjc=arr['updtime']-arr['addtime']
|
|
@@ -232,7 +232,7 @@ class Queues():
|
|
|
232
232
|
|
|
233
233
|
return Boolean
|
|
234
234
|
"""
|
|
235
|
-
if
|
|
235
|
+
if kcwsqlite.sqlite.connect(queuesdbpath).table("model_kcwebs_queues").where("code","in",2,3).count():
|
|
236
236
|
return True
|
|
237
237
|
else:
|
|
238
238
|
return False
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 1.2
|
|
2
2
|
Name: kcwebs
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.90
|
|
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.90
|
|
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.96','kcwmysql>=1.5','kcwhttp>=1.3','python-dateutil==2.9.0',
|
|
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.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/app/api/controller/index/common/__init__.py
RENAMED
|
File without changes
|
{kcwebs-1.88 → kcwebs-1.90}/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.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/app/api/controller/index/tpl/index/home.html
RENAMED
|
File without changes
|
{kcwebs-1.88 → kcwebs-1.90}/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
|