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.
Files changed (43) hide show
  1. {kcwebs-1.88 → kcwebs-1.90}/PKG-INFO +2 -2
  2. {kcwebs-1.88 → kcwebs-1.90}/kcwebs/__init__.py +1 -1
  3. {kcwebs-1.88 → kcwebs-1.90}/kcwebs/common/autoload.py +2 -2
  4. {kcwebs-1.88 → kcwebs-1.90}/kcwebs/utill/queues.py +29 -29
  5. {kcwebs-1.88 → kcwebs-1.90}/kcwebs.egg-info/PKG-INFO +2 -2
  6. {kcwebs-1.88 → kcwebs-1.90}/kcwebs.egg-info/SOURCES.txt +1 -3
  7. {kcwebs-1.88 → kcwebs-1.90}/kcwebs.egg-info/requires.txt +1 -0
  8. {kcwebs-1.88 → kcwebs-1.90}/setup.py +1 -1
  9. kcwebs-1.88/kcwebs/utill/db/sqlite.py +0 -684
  10. {kcwebs-1.88 → kcwebs-1.90}/README.md +0 -0
  11. {kcwebs-1.88 → kcwebs-1.90}/kcwebs/common/__init__.py +0 -0
  12. {kcwebs-1.88 → kcwebs-1.90}/kcwebs/common/session.py +0 -0
  13. {kcwebs-1.88 → kcwebs-1.90}/kcwebs/config/__init__.py +0 -0
  14. {kcwebs-1.88 → kcwebs-1.90}/kcwebs/kcwebs.py +0 -0
  15. {kcwebs-1.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/app/__init__.py +0 -0
  16. {kcwebs-1.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/app/api/__init__.py +0 -0
  17. {kcwebs-1.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/app/api/common/__init__.py +0 -0
  18. {kcwebs-1.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/app/api/common/autoload.py +0 -0
  19. {kcwebs-1.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/app/api/controller/__init__.py +0 -0
  20. {kcwebs-1.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/app/api/controller/index/__init__.py +0 -0
  21. {kcwebs-1.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/app/api/controller/index/common/__init__.py +0 -0
  22. {kcwebs-1.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/app/api/controller/index/common/autoload.py +0 -0
  23. {kcwebs-1.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/app/api/controller/index/common/html/include/static.html +0 -0
  24. {kcwebs-1.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/app/api/controller/index/common/model.py +0 -0
  25. {kcwebs-1.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/app/api/controller/index/index.py +0 -0
  26. {kcwebs-1.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/app/api/controller/index/tpl/index/home.html +0 -0
  27. {kcwebs-1.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/app/api/controller/index/tpl/index/index.html +0 -0
  28. {kcwebs-1.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/app/common/__init__.py +0 -0
  29. {kcwebs-1.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/app/common/autoload.py +0 -0
  30. {kcwebs-1.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/app/common/html/include/static.html +0 -0
  31. {kcwebs-1.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/app/common/model.py +0 -0
  32. {kcwebs-1.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/app/config/__init__.py +0 -0
  33. {kcwebs-1.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/app/config/app.py +0 -0
  34. {kcwebs-1.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/app/config/database.py +0 -0
  35. {kcwebs-1.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/app/config/other.py +0 -0
  36. {kcwebs-1.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/app/config/redis.py +0 -0
  37. {kcwebs-1.88 → kcwebs-1.90}/kcwebs/tempfile/kcwebs/server.py +0 -0
  38. {kcwebs-1.88 → kcwebs-1.90}/kcwebs/utill/db/model.py +0 -0
  39. {kcwebs-1.88 → kcwebs-1.90}/kcwebs/utill/db/mongodb.py +0 -0
  40. {kcwebs-1.88 → kcwebs-1.90}/kcwebs.egg-info/dependency_links.txt +0 -0
  41. {kcwebs-1.88 → kcwebs-1.90}/kcwebs.egg-info/entry_points.txt +0 -0
  42. {kcwebs-1.88 → kcwebs-1.90}/kcwebs.egg-info/top_level.txt +0 -0
  43. {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.88
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.88
12
+ Keywords: kcwebs1.90
13
13
  Platform: UNKNOWN
@@ -1,5 +1,5 @@
1
1
  # -*- coding: utf-8 -*-
2
- __version__ = '1.88'
2
+ __version__ = '1.90'
3
3
 
4
4
  kcwebsinfo={}
5
5
  kcwebsinfo['name']='kcwebs' #项目的名称
@@ -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
- dbs=kcwssqlite.sqlite()
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
- kcwssqlite.sqlite().connect(queuesdbpath).table("model_kcwebs_queues").find()
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
- kcwssqlite.sqlite().connect(queuesdbpath).table("model_kcwebs_queues").find()
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
- kcwssqlite.sqlite().connect(queuesdbpath).table("model_kcwebs_queues").where("code=2 and updtime<"+str(int(time.time())-86400*7)).delete()
59
- kcwssqlite.sqlite().connect(queuesdbpath).table("model_kcwebs_queues").where("code=3 and updtime<"+str(int(time.time())-1200)).delete()
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
- kcwssqlite.sqlite().connect(queuesdbpath).table("model_kcwebs_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":3,"error":""})
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
- kcwssqlite.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())})
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
- kcwssqlite.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())})
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
- kcwssqlite.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())})
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
- kcwssqlite.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())})
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
- kcwssqlite.sqlite().connect(queuesdbpath).table("model_kcwebs_queues").where("code=2 and updtime<"+str(int(time.time())-86400*7)).delete()
87
- kcwssqlite.sqlite().connect(queuesdbpath).table("model_kcwebs_queues").where("code=3 and updtime<"+str(int(time.time())-1200)).delete()
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
- kcwssqlite.sqlite().connect(queuesdbpath).table("model_kcwebs_queues").where("taskid = '"+value['task']['taskid']+"' and code!=4").update({"code":3,"error":""})
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
- kcwssqlite.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())})
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
- kcwssqlite.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())})
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
- kcwssqlite.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())})
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
- kcwssqlite.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())})
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 kcwssqlite.sqlite().connect(queuesdbpath).table("model_kcwebs_queues").where("code","in",0,1,4).delete()
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 kcwssqlite.sqlite().connect(queuesdbpath).table("model_kcwebs_queues").where(where).delete()
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 kcwssqlite.sqlite().connect(queuesdbpath).table("model_kcwebs_queues").where("title='"+title+"'").select()
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 kcwssqlite.sqlite().connect(queuesdbpath).table("model_kcwebs_queues").where("taskid",taskid).update({key:value})
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=kcwssqlite.sqlite().connect(queuesdbpath).table("model_kcwebs_queues").where("taskid",taskid).find()
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
- kcwssqlite.sqlite().connect(queuesdbpath).table("model_kcwebs_queues").where("taskid",taskid).update(upddate)
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
- kcwssqlite.sqlite().connect(queuesdbpath).table("model_kcwebs_queues").insert(task)
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=kcwssqlite.sqlite().connect(queuesdbpath).where(where).table("model_kcwebs_queues").order("id desc").page(pagenow,pagesize).select()
205
- count=kcwssqlite.sqlite().connect(queuesdbpath).where(where).table("model_kcwebs_queues").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=kcwssqlite.sqlite().connect(queuesdbpath).table("model_kcwebs_queues").where("taskid",taskid).find()
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 kcwssqlite.sqlite().connect(queuesdbpath).table("model_kcwebs_queues").where("code","in",2,3).count():
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.88
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.88
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
@@ -1,5 +1,6 @@
1
1
  kcws>=1.96
2
2
  kcwmysql>=1.5
3
+ kcwsqlite>=1.1
3
4
  kcwhttp>=1.3
4
5
  python-dateutil==2.9.0
5
6
  pymongo==3.10.0
@@ -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