re-common 10.0.39__py3-none-any.whl → 10.0.40__py3-none-any.whl

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 (218) hide show
  1. re_common/baselibrary/__init__.py +4 -4
  2. re_common/baselibrary/baseabs/__init__.py +6 -6
  3. re_common/baselibrary/baseabs/baseabs.py +26 -26
  4. re_common/baselibrary/database/mbuilder.py +132 -132
  5. re_common/baselibrary/database/moudle.py +93 -93
  6. re_common/baselibrary/database/msqlite3.py +194 -194
  7. re_common/baselibrary/database/mysql.py +169 -169
  8. re_common/baselibrary/database/sql_factory.py +26 -26
  9. re_common/baselibrary/mthread/MThreadingRun.py +486 -486
  10. re_common/baselibrary/mthread/MThreadingRunEvent.py +349 -349
  11. re_common/baselibrary/mthread/__init__.py +2 -2
  12. re_common/baselibrary/mthread/mythreading.py +695 -695
  13. re_common/baselibrary/pakge_other/socks.py +404 -404
  14. re_common/baselibrary/readconfig/config_factory.py +18 -18
  15. re_common/baselibrary/readconfig/ini_config.py +317 -317
  16. re_common/baselibrary/readconfig/toml_config.py +49 -49
  17. re_common/baselibrary/temporary/envdata.py +36 -36
  18. re_common/baselibrary/tools/all_requests/aiohttp_request.py +118 -118
  19. re_common/baselibrary/tools/all_requests/httpx_requet.py +102 -102
  20. re_common/baselibrary/tools/all_requests/mrequest.py +412 -412
  21. re_common/baselibrary/tools/all_requests/requests_request.py +81 -81
  22. re_common/baselibrary/tools/batch_compre/bijiao_batch.py +31 -31
  23. re_common/baselibrary/tools/contrast_db3.py +123 -123
  24. re_common/baselibrary/tools/copy_file.py +39 -39
  25. re_common/baselibrary/tools/db3_2_sizedb3.py +102 -102
  26. re_common/baselibrary/tools/foreachgz.py +39 -39
  27. re_common/baselibrary/tools/get_attr.py +10 -10
  28. re_common/baselibrary/tools/image_to_pdf.py +61 -61
  29. re_common/baselibrary/tools/java_code_deal.py +139 -139
  30. re_common/baselibrary/tools/javacode.py +79 -79
  31. re_common/baselibrary/tools/mdb_db3.py +48 -48
  32. re_common/baselibrary/tools/merge_file.py +171 -171
  33. re_common/baselibrary/tools/merge_gz_file.py +165 -165
  34. re_common/baselibrary/tools/mhdfstools/down_hdfs_files.py +42 -42
  35. re_common/baselibrary/tools/mhdfstools/hdfst.py +42 -42
  36. re_common/baselibrary/tools/mhdfstools/up_hdfs_files.py +38 -38
  37. re_common/baselibrary/tools/mongo_tools.py +50 -50
  38. re_common/baselibrary/tools/move_file.py +170 -170
  39. re_common/baselibrary/tools/move_mongo/mongo_table_to_file.py +63 -63
  40. re_common/baselibrary/tools/move_mongo/move_mongo_table.py +354 -354
  41. re_common/baselibrary/tools/move_mongo/use_mttf.py +18 -18
  42. re_common/baselibrary/tools/move_mongo/use_mv.py +93 -93
  43. re_common/baselibrary/tools/mpandas/mpandasreadexcel.py +125 -125
  44. re_common/baselibrary/tools/mpandas/pandas_visualization.py +7 -7
  45. re_common/baselibrary/tools/myparsel.py +104 -104
  46. re_common/baselibrary/tools/rename_dir_file.py +37 -37
  47. re_common/baselibrary/tools/sequoiadb_utils.py +398 -398
  48. re_common/baselibrary/tools/split_line_to_many.py +25 -25
  49. re_common/baselibrary/tools/stringtodicts.py +33 -33
  50. re_common/baselibrary/tools/workwechant_bot.py +84 -84
  51. re_common/baselibrary/utils/baseaiohttp.py +296 -296
  52. re_common/baselibrary/utils/baseaiomysql.py +87 -87
  53. re_common/baselibrary/utils/baseallstep.py +191 -191
  54. re_common/baselibrary/utils/baseavro.py +19 -19
  55. re_common/baselibrary/utils/baseboto3.py +291 -291
  56. re_common/baselibrary/utils/basecsv.py +32 -32
  57. re_common/baselibrary/utils/basedict.py +133 -133
  58. re_common/baselibrary/utils/basedir.py +241 -241
  59. re_common/baselibrary/utils/baseencode.py +351 -351
  60. re_common/baselibrary/utils/baseencoding.py +28 -28
  61. re_common/baselibrary/utils/baseesdsl.py +86 -86
  62. re_common/baselibrary/utils/baseexcel.py +264 -264
  63. re_common/baselibrary/utils/baseexcept.py +109 -109
  64. re_common/baselibrary/utils/basefile.py +654 -654
  65. re_common/baselibrary/utils/baseftp.py +214 -214
  66. re_common/baselibrary/utils/basegzip.py +60 -60
  67. re_common/baselibrary/utils/basehdfs.py +135 -135
  68. re_common/baselibrary/utils/basehttpx.py +268 -268
  69. re_common/baselibrary/utils/baseip.py +87 -87
  70. re_common/baselibrary/utils/basejson.py +2 -2
  71. re_common/baselibrary/utils/baselist.py +32 -32
  72. re_common/baselibrary/utils/basemotor.py +190 -190
  73. re_common/baselibrary/utils/basemssql.py +98 -98
  74. re_common/baselibrary/utils/baseodbc.py +113 -113
  75. re_common/baselibrary/utils/basepandas.py +302 -302
  76. re_common/baselibrary/utils/basepeewee.py +11 -11
  77. re_common/baselibrary/utils/basepika.py +180 -180
  78. re_common/baselibrary/utils/basepydash.py +143 -143
  79. re_common/baselibrary/utils/basepymongo.py +230 -230
  80. re_common/baselibrary/utils/basequeue.py +22 -22
  81. re_common/baselibrary/utils/baserar.py +57 -57
  82. re_common/baselibrary/utils/baserequest.py +279 -279
  83. re_common/baselibrary/utils/baseset.py +8 -8
  84. re_common/baselibrary/utils/basesmb.py +403 -403
  85. re_common/baselibrary/utils/basestring.py +382 -382
  86. re_common/baselibrary/utils/basetime.py +320 -320
  87. re_common/baselibrary/utils/baseurl.py +121 -121
  88. re_common/baselibrary/utils/basezip.py +57 -57
  89. re_common/baselibrary/utils/core/__init__.py +7 -7
  90. re_common/baselibrary/utils/core/bottomutils.py +18 -18
  91. re_common/baselibrary/utils/core/mdeprecated.py +327 -327
  92. re_common/baselibrary/utils/core/mlamada.py +16 -16
  93. re_common/baselibrary/utils/core/msginfo.py +25 -25
  94. re_common/baselibrary/utils/core/requests_core.py +103 -103
  95. re_common/baselibrary/utils/fateadm.py +429 -429
  96. re_common/baselibrary/utils/importfun.py +123 -123
  97. re_common/baselibrary/utils/mfaker.py +57 -57
  98. re_common/baselibrary/utils/my_abc/__init__.py +3 -3
  99. re_common/baselibrary/utils/my_abc/better_abc.py +32 -32
  100. re_common/baselibrary/utils/mylogger.py +414 -414
  101. re_common/baselibrary/utils/myredisclient.py +861 -861
  102. re_common/baselibrary/utils/pipupgrade.py +21 -21
  103. re_common/baselibrary/utils/ringlist.py +85 -85
  104. re_common/baselibrary/utils/version_compare.py +36 -36
  105. re_common/baselibrary/utils/ydmhttp.py +126 -126
  106. re_common/facade/lazy_import.py +11 -11
  107. re_common/facade/loggerfacade.py +25 -25
  108. re_common/facade/mysqlfacade.py +467 -467
  109. re_common/facade/now.py +31 -31
  110. re_common/facade/sqlite3facade.py +257 -257
  111. re_common/facade/use/mq_use_facade.py +83 -83
  112. re_common/facade/use/proxy_use_facade.py +19 -19
  113. re_common/libtest/base_dict_test.py +19 -19
  114. re_common/libtest/baseavro_test.py +13 -13
  115. re_common/libtest/basefile_test.py +14 -14
  116. re_common/libtest/basemssql_test.py +77 -77
  117. re_common/libtest/baseodbc_test.py +7 -7
  118. re_common/libtest/basepandas_test.py +38 -38
  119. re_common/libtest/get_attr_test/get_attr_test_settings.py +14 -14
  120. re_common/libtest/get_attr_test/settings.py +54 -54
  121. re_common/libtest/idencode_test.py +53 -53
  122. re_common/libtest/iniconfig_test.py +35 -35
  123. re_common/libtest/ip_test.py +34 -34
  124. re_common/libtest/merge_file_test.py +20 -20
  125. re_common/libtest/mfaker_test.py +8 -8
  126. re_common/libtest/mm3_test.py +31 -31
  127. re_common/libtest/mylogger_test.py +88 -88
  128. re_common/libtest/myparsel_test.py +27 -27
  129. re_common/libtest/mysql_test.py +151 -151
  130. re_common/libtest/pymongo_test.py +21 -21
  131. re_common/libtest/split_test.py +11 -11
  132. re_common/libtest/sqlite3_merge_test.py +5 -5
  133. re_common/libtest/sqlite3_test.py +34 -34
  134. re_common/libtest/tomlconfig_test.py +30 -30
  135. re_common/libtest/use_tools_test/__init__.py +2 -2
  136. re_common/libtest/user/__init__.py +4 -4
  137. re_common/studio/__init__.py +4 -4
  138. re_common/studio/assignment_expressions.py +36 -36
  139. re_common/studio/mydash/test1.py +18 -18
  140. re_common/studio/pydashstudio/first.py +9 -9
  141. re_common/studio/streamlitstudio/first_app.py +65 -65
  142. re_common/studio/streamlitstudio/uber_pickups.py +23 -23
  143. re_common/studio/test.py +18 -18
  144. re_common/v2/baselibrary/business_utils/BusinessStringUtil.py +219 -219
  145. re_common/v2/baselibrary/business_utils/baseencodeid.py +100 -100
  146. re_common/v2/baselibrary/business_utils/full_doi_path.py +116 -116
  147. re_common/v2/baselibrary/business_utils/rel_tools.py +6 -6
  148. re_common/v2/baselibrary/decorators/utils.py +59 -59
  149. re_common/v2/baselibrary/helpers/search_packge/NearestNeighbors_test.py +105 -105
  150. re_common/v2/baselibrary/helpers/search_packge/fit_text_match.py +253 -253
  151. re_common/v2/baselibrary/helpers/search_packge/scikit_learn_text_matcher.py +260 -260
  152. re_common/v2/baselibrary/helpers/search_packge/test.py +1 -1
  153. re_common/v2/baselibrary/s3object/baseboto3.py +230 -230
  154. re_common/v2/baselibrary/tools/WeChatRobot.py +95 -95
  155. re_common/v2/baselibrary/tools/ac_ahocorasick.py +75 -75
  156. re_common/v2/baselibrary/tools/concurrency.py +35 -35
  157. re_common/v2/baselibrary/tools/data_processer/base.py +53 -53
  158. re_common/v2/baselibrary/tools/data_processer/data_processer.py +508 -508
  159. re_common/v2/baselibrary/tools/data_processer/data_reader.py +187 -187
  160. re_common/v2/baselibrary/tools/data_processer/data_writer.py +38 -38
  161. re_common/v2/baselibrary/tools/dict_tools.py +44 -44
  162. re_common/v2/baselibrary/tools/dolphinscheduler.py +187 -187
  163. re_common/v2/baselibrary/tools/hdfs_base_processor.py +204 -204
  164. re_common/v2/baselibrary/tools/hdfs_bulk_processor.py +67 -67
  165. re_common/v2/baselibrary/tools/hdfs_data_processer.py +338 -338
  166. re_common/v2/baselibrary/tools/hdfs_line_processor.py +74 -74
  167. re_common/v2/baselibrary/tools/list_tools.py +69 -69
  168. re_common/v2/baselibrary/tools/resume_tracker.py +94 -94
  169. re_common/v2/baselibrary/tools/search_hash_tools.py +54 -54
  170. re_common/v2/baselibrary/tools/text_matcher.py +326 -326
  171. re_common/v2/baselibrary/tools/unionfind_tools.py +60 -60
  172. re_common/v2/baselibrary/utils/BusinessStringUtil.py +196 -196
  173. re_common/v2/baselibrary/utils/api_net_utils.py +270 -270
  174. re_common/v2/baselibrary/utils/author_smi.py +361 -361
  175. re_common/v2/baselibrary/utils/base_string_similarity.py +158 -158
  176. re_common/v2/baselibrary/utils/basedict.py +37 -37
  177. re_common/v2/baselibrary/utils/basehdfs.py +163 -163
  178. re_common/v2/baselibrary/utils/basepika.py +180 -180
  179. re_common/v2/baselibrary/utils/basetime.py +77 -77
  180. re_common/v2/baselibrary/utils/db.py +156 -156
  181. re_common/v2/baselibrary/utils/elasticsearch.py +46 -0
  182. re_common/v2/baselibrary/utils/json_cls.py +16 -16
  183. re_common/v2/baselibrary/utils/mq.py +83 -83
  184. re_common/v2/baselibrary/utils/n_ary_expression_tree.py +243 -243
  185. re_common/v2/baselibrary/utils/string_bool.py +186 -186
  186. re_common/v2/baselibrary/utils/string_clear.py +246 -246
  187. re_common/v2/baselibrary/utils/string_smi.py +18 -18
  188. re_common/v2/baselibrary/utils/stringutils.py +271 -271
  189. re_common/vip/base_step_process.py +11 -11
  190. re_common/vip/baseencodeid.py +90 -90
  191. re_common/vip/changetaskname.py +28 -28
  192. re_common/vip/core_var.py +24 -24
  193. re_common/vip/mmh3Hash.py +89 -89
  194. re_common/vip/proxy/allproxys.py +127 -127
  195. re_common/vip/proxy/allproxys_thread.py +159 -159
  196. re_common/vip/proxy/cnki_proxy.py +153 -153
  197. re_common/vip/proxy/kuaidaili.py +87 -87
  198. re_common/vip/proxy/proxy_all.py +113 -113
  199. re_common/vip/proxy/update_kuaidaili_0.py +42 -42
  200. re_common/vip/proxy/wanfang_proxy.py +152 -152
  201. re_common/vip/proxy/wp_proxy_all.py +181 -181
  202. re_common/vip/read_rawid_to_txt.py +91 -91
  203. re_common/vip/title/__init__.py +5 -5
  204. re_common/vip/title/transform/TransformBookTitleToZt.py +125 -125
  205. re_common/vip/title/transform/TransformConferenceTitleToZt.py +139 -139
  206. re_common/vip/title/transform/TransformCstadTitleToZt.py +195 -195
  207. re_common/vip/title/transform/TransformJournalTitleToZt.py +203 -203
  208. re_common/vip/title/transform/TransformPatentTitleToZt.py +132 -132
  209. re_common/vip/title/transform/TransformRegulationTitleToZt.py +114 -114
  210. re_common/vip/title/transform/TransformStandardTitleToZt.py +135 -135
  211. re_common/vip/title/transform/TransformThesisTitleToZt.py +135 -135
  212. re_common/vip/title/transform/__init__.py +10 -10
  213. {re_common-10.0.39.dist-info → re_common-10.0.40.dist-info}/LICENSE +201 -201
  214. {re_common-10.0.39.dist-info → re_common-10.0.40.dist-info}/METADATA +24 -16
  215. re_common-10.0.40.dist-info/RECORD +249 -0
  216. {re_common-10.0.39.dist-info → re_common-10.0.40.dist-info}/WHEEL +1 -1
  217. re_common-10.0.39.dist-info/RECORD +0 -248
  218. {re_common-10.0.39.dist-info → re_common-10.0.40.dist-info}/top_level.txt +0 -0
@@ -1,467 +1,467 @@
1
- import sys
2
- import traceback
3
-
4
- import pymysql
5
-
6
- from re_common.baselibrary import MLogger
7
- from re_common.baselibrary.baseabs import BaseAbs
8
- from re_common.baselibrary.database.mbuilder import MysqlBuilderAbstract
9
- from re_common.baselibrary.database.moudle import SqlMoudle
10
- from re_common.baselibrary.readconfig.ini_config import IniConfig
11
- from re_common.baselibrary.readconfig.toml_config import TomlConfig
12
-
13
-
14
- class MysqlBuilder(MysqlBuilderAbstract):
15
- def __init__(self, configfile, configname, keytransformdicts=None):
16
- # sql的moudle对象 mysql通过该对象对接参数
17
- self.sqlmoudle = SqlMoudle()
18
- # 获取配置文件对象
19
- self.ic = IniConfig(configfile).builder()
20
- # 配置文件位置
21
- self.configfile = configfile
22
- # 配置文件的sections
23
- self.configname = configname
24
- # 使用key转换器转换key(主要用于配置文件的key与我们默认读取时的key不一致)
25
- self.keytransformdicts = keytransformdicts
26
- """
27
- python2
28
- self.config.readfp(open(configfile, 'rb'))
29
- python3
30
- self.config.read_file(open(configfile, 'r'))
31
- """
32
-
33
- def build_port(self, port):
34
- self.sqlmoudle.port = int(self.ic.get_value(self.configname, port))
35
- return self
36
-
37
- def build_server_address(self, host):
38
- self.sqlmoudle.host = self.ic.get_value(self.configname, host)
39
- return self
40
-
41
- def build_password(self, passwd):
42
- self.sqlmoudle.passwd = self.ic.get_value(self.configname, passwd)
43
- return self
44
-
45
- def use_db(self, db):
46
- self.sqlmoudle.db = self.ic.get_value(self.configname, db)
47
- return self
48
-
49
- def build_username(self, user):
50
- self.sqlmoudle.user = self.ic.get_value(self.configname, user)
51
- return self
52
-
53
- def build_chart(self, chartset):
54
- self.sqlmoudle.charset = self.ic.get_value(self.configname, chartset)
55
- return self
56
-
57
- def build_cursorclass(self, cursornum):
58
- if cursornum == 1:
59
- self.sqlmoudle.cursorclass = pymysql.cursors.DictCursor
60
- else:
61
- # 默认保持不变
62
- pass
63
-
64
- return self
65
-
66
- # def build_cursorclass(self,cursorclass):
67
- # self.sqlmoudle.cursorclass = self.ic.get_value(self.configname, cursorclass)
68
-
69
- def get_moudle(self):
70
- """
71
- 返回数据库连接需要的对象
72
- :return:
73
- """
74
- return self.sqlmoudle
75
-
76
- def build_all(self):
77
- if not self.keytransformdicts:
78
- # 不传入时不转换
79
- self.keytransformdicts = {"port": "port", "host": "host", "passwd": "passwd", "user": "user", "db": "db",
80
- "chartset": "chartset"}
81
- self.build_port(self.keytransformdicts["port"])
82
- self.build_server_address(self.keytransformdicts["host"])
83
- self.build_password(self.keytransformdicts["passwd"])
84
- self.build_username(self.keytransformdicts["user"])
85
- self.use_db(self.keytransformdicts["db"])
86
- self.build_chart(self.keytransformdicts["chartset"])
87
- return self
88
-
89
- def get_tuples(self):
90
- return self.sqlmoudle.host, self.sqlmoudle.user, self.sqlmoudle.passwd, self.sqlmoudle.port
91
-
92
-
93
- class MysqlBuilderForToml(MysqlBuilderAbstract):
94
- def __init__(self, configfile, sesc, keytransformdicts=None):
95
- # sql的moudle对象 mysql通过该对象对接参数
96
- self.sqlmoudle = SqlMoudle()
97
- # 获取配置文件对象
98
- self.dic = TomlConfig(configfile).read_file_remove_bom().get_dicts()
99
- # 配置文件位置
100
- self.configfile = configfile
101
- # 配置文件的sections
102
- self.sesc = sesc
103
- # 使用key转换器转换key(主要用于配置文件的key与我们默认读取时的key不一致)
104
- self.keytransformdicts = keytransformdicts
105
- """
106
- python2
107
- self.config.readfp(open(configfile, 'rb'))
108
- python3
109
- self.config.read_file(open(configfile, 'r'))
110
- """
111
-
112
- def build_port(self, port):
113
- self.sqlmoudle.port = int(self.dic[self.sesc][port])
114
- return self
115
-
116
- def build_server_address(self, host):
117
- self.sqlmoudle.host = self.dic[self.sesc][host]
118
- return self
119
-
120
- def build_password(self, passwd):
121
- self.sqlmoudle.passwd = self.dic[self.sesc][passwd]
122
- return self
123
-
124
- def use_db(self, db):
125
- self.sqlmoudle.db = self.dic[self.sesc][db]
126
- return self
127
-
128
- def build_username(self, user):
129
- self.sqlmoudle.user = self.dic[self.sesc][user]
130
- return self
131
-
132
- def build_chart(self, chartset):
133
- self.sqlmoudle.charset = self.dic[self.sesc][chartset]
134
- return self
135
-
136
- def build_cursorclass(self, cursornum):
137
- if cursornum == 1:
138
- self.sqlmoudle.cursorclass = pymysql.cursors.DictCursor
139
- else:
140
- # 默认保持不变
141
- pass
142
-
143
- return self
144
-
145
- def get_moudle(self):
146
- """
147
- 返回数据库连接需要的对象
148
- :return:
149
- """
150
- return self.sqlmoudle
151
-
152
- def build_all(self):
153
- if not self.keytransformdicts:
154
- # 不传入时不转换
155
- self.keytransformdicts = {"port": "port", "host": "host", "passwd": "passwd", "user": "user", "db": "db",
156
- "chartset": "chartset"}
157
- self.build_port(self.keytransformdicts["port"])
158
- self.build_server_address(self.keytransformdicts["host"])
159
- self.build_password(self.keytransformdicts["passwd"])
160
- self.build_username(self.keytransformdicts["user"])
161
- self.use_db(self.keytransformdicts["db"])
162
- self.build_chart(self.keytransformdicts["chartset"])
163
- return self
164
-
165
- def get_tuples(self):
166
- return self.sqlmoudle.host, self.sqlmoudle.user, self.sqlmoudle.passwd, self.sqlmoudle.port
167
-
168
-
169
- class MysqlBuilderForDicts(MysqlBuilderAbstract):
170
- def __init__(self, dicts, keytransformdicts=None):
171
- # sql的moudle对象 mysql通过该对象对接参数
172
- self.sqlmoudle = SqlMoudle()
173
- self.dicts = dicts
174
- # 使用key转换器转换key(主要用于配置文件的key与我们默认读取时的key不一致)
175
- self.keytransformdicts = keytransformdicts
176
-
177
- def build_port(self, port):
178
- self.sqlmoudle.port = int(self.dicts[port])
179
- return self
180
-
181
- def build_server_address(self, host):
182
- self.sqlmoudle.host = self.dicts[host]
183
- return self
184
-
185
- def build_password(self, passwd):
186
- self.sqlmoudle.passwd = self.dicts[passwd]
187
- return self
188
-
189
- def use_db(self, db):
190
- self.sqlmoudle.db = self.dicts[db]
191
- return self
192
-
193
- def build_username(self, user):
194
- self.sqlmoudle.user = self.dicts[user]
195
- return self
196
-
197
- def build_chart(self, chartset):
198
- self.sqlmoudle.charset = self.dicts[chartset]
199
- return self
200
-
201
- def build_cursorclass(self, cursornum):
202
- if cursornum == 1:
203
- self.sqlmoudle.cursorclass = pymysql.cursors.DictCursor
204
- else:
205
- # 默认保持不变
206
- pass
207
-
208
- return self
209
-
210
- def get_moudle(self):
211
- """
212
- 返回数据库连接需要的对象
213
- :return:
214
- """
215
- return self.sqlmoudle
216
-
217
- def build_all(self):
218
- if not self.keytransformdicts:
219
- # 不传入时不转换
220
- self.keytransformdicts = {"port": "port", "host": "host", "passwd": "passwd", "user": "user", "db": "db",
221
- "chartset": "chartset"}
222
- self.build_port(self.keytransformdicts["port"])
223
- self.build_server_address(self.keytransformdicts["host"])
224
- self.build_password(self.keytransformdicts["passwd"])
225
- self.build_username(self.keytransformdicts["user"])
226
- self.use_db(self.keytransformdicts["db"])
227
- self.build_chart(self.keytransformdicts["chartset"])
228
- return self
229
-
230
- def get_tuples(self):
231
- return self.sqlmoudle.host, self.sqlmoudle.user, self.sqlmoudle.passwd, self.sqlmoudle.port
232
-
233
-
234
- class MysqlUtiles(object):
235
- def __init__(self, cfgfilepath, sesc, logger=None, keytransformdicts=None, builder="MysqlBuilder", cursorsnum=0,
236
- dicts=None):
237
- """
238
-
239
- :param cfgfilepath:
240
- :param sesc:
241
- :param logger:
242
- :param keytransformdicts:
243
- :param builder:
244
- :param cursors: 0表示默认,1 表示dicts 其他情况后面再添加
245
- """
246
- self._logger = logger
247
- # 通过工厂方法获取mysql对象
248
- self.mysql = BaseAbs.get_sql_factory().mysql_factory("mysql")
249
- # mysql 连接通过builder进行适配 这里的builder通过配置文件获取相关连接信息
250
- # 也可以通过继承 MysqlBuilderAbstract 后自己手动设置builer
251
- if builder == "MysqlBuilder":
252
- self.builder = MysqlBuilder(cfgfilepath, sesc, keytransformdicts)
253
- elif builder == "MysqlBuilderForToml":
254
- self.builder = MysqlBuilderForToml(cfgfilepath, sesc, keytransformdicts)
255
- elif builder == "MysqlBuilderForDicts":
256
- self.builder = MysqlBuilderForDicts(dicts, keytransformdicts)
257
- else:
258
- raise Exception("传入builder 参数有误")
259
- self.builder = self.builder.build_all().build_cursorclass(cursorsnum)
260
- self.moudle = self.builder.get_moudle()
261
- # 连接mysql通过唯一适配moudle
262
- # print(self.moudle.to_dict())
263
- self.mysql.link(self.moudle)
264
-
265
- @property
266
- def logger(self):
267
- if self._logger is None:
268
- self._logger = MLogger().streamlogger
269
- return self._logger
270
-
271
- @logger.setter
272
- def logger(self, value):
273
- assert isinstance(value, MLogger)
274
- self._logger = value
275
-
276
- # 更新数据库状态
277
- def ExeSqlListToDB(self, sSqlList, errExit=True, args=None):
278
- """
279
- 该函数处理一个sql列表 没有返回并将列表置空
280
- :param sSqlList:
281
- :return:
282
- """
283
- dbMsg = None
284
- if not self.mysql:
285
- raise ValueError("database conn or database config must have to have one")
286
- if not self.mysql.is_ping():
287
- self.mysql.reConnect()
288
- cursor = self.mysql.get_new_cursor()
289
- errcount = 0
290
- successcount = 0
291
- for sql in sSqlList:
292
- try:
293
- self.logger.info(sql + ";" + str(args))
294
- cursor.execute(sql, args=args)
295
- successcount += 1
296
- except:
297
- errcount += 1
298
- self.mysql.commit()
299
- self.logger.error('*errSql:' + sql)
300
- dbMsg = '*updateError:' + traceback.format_exc()
301
- if errExit:
302
- self.logger.error(dbMsg)
303
- sys.exit(-1)
304
- if dbMsg:
305
- self.logger.error(dbMsg)
306
- self.mysql.commit()
307
- cursor.close()
308
- if errcount:
309
- return False, successcount, errcount
310
- else:
311
- return True, successcount, errcount
312
-
313
- def SelectFromDB(self, sSql, errExit=True, args=None):
314
- """
315
- 使用sql语句查询并返回结果列表
316
- :param sql:
317
- :return:
318
- """
319
- if not self.mysql:
320
- raise ValueError("database conn or database config must have to have one")
321
- if self.mysql.is_ping():
322
- self.mysql.reConnect()
323
- cursor = self.mysql.get_new_cursor()
324
- try:
325
- self.logger.info(sSql + ";" + str(args))
326
- result = cursor.execute(sSql, args=args)
327
- rows = cursor.fetchall()
328
- return True, rows
329
- except:
330
- self.logger.error('* errSql:' + sSql)
331
- sMsg = '* errSynax:' + traceback.format_exc()
332
- if errExit:
333
- self.logger.error(sMsg)
334
- sys.exit(-1)
335
- finally:
336
- self.mysql.commit()
337
- cursor.close()
338
- if sMsg:
339
- self.logger.error(sMsg)
340
- return False, sMsg
341
-
342
- def SelectFromDBFetchOne_noyield(self, sSql, errExit=True, args=None):
343
- """
344
- 使用sql语句查询并返回结果列表
345
- :param sql:
346
- :return:
347
- """
348
- if not self.mysql:
349
- raise ValueError("database conn or database config must have to have one")
350
- if self.mysql.is_ping():
351
- self.mysql.reConnect()
352
- cur = self.mysql.get_new_cursor()
353
- try:
354
- self.logger.info(sSql + ";" + str(args))
355
- result = cur.execute(sSql, args=args)
356
- return True, cur.fetchone()
357
- except:
358
- self.logger.error('* errSql:' + sSql)
359
- sMsg = '* errSynax:' + traceback.format_exc()
360
- if errExit:
361
- self.logger.error(sMsg)
362
- sys.exit(-1)
363
- finally:
364
- self.mysql.commit()
365
- cur.close()
366
- if sMsg:
367
- self.logger.error(sMsg)
368
- return False, sMsg
369
-
370
- def SelectFromDBFetchOne(self, sSql, errExit=True, args=None):
371
- """
372
- 使用sql语句查询并返回结果列表
373
- :param sql:
374
- :return:
375
- """
376
- if not self.mysql:
377
- raise ValueError("database conn or database config must have to have one")
378
- if self.mysql.is_ping():
379
- self.mysql.reConnect()
380
- cur = self.mysql.get_new_cursor()
381
- try:
382
- self.logger.info(sSql + ";" + str(args))
383
- result = cur.execute(sSql, args=args)
384
- while True:
385
- row = cur.fetchone()
386
- if row is None:
387
- return None
388
- else:
389
- yield row
390
- except:
391
- self.logger.error('* errSql:' + sSql)
392
- sMsg = '* errSynax:' + traceback.format_exc()
393
- if errExit:
394
- self.logger.error(sMsg)
395
- sys.exit(-1)
396
- finally:
397
- self.mysql.commit()
398
- cur.close()
399
- if sMsg:
400
- self.logger.error(sMsg)
401
- return None
402
-
403
- def ExeSqlToDB(self, sSql, errExit=True, args=None):
404
- if not self.mysql:
405
- raise ValueError("database conn or database config must have to have one")
406
- if self.mysql.is_ping():
407
- self.mysql.reConnect()
408
- cur = self.mysql.get_new_cursor()
409
- try:
410
- self.logger.info(sSql + ";" + str(args))
411
- rows = cur.execute(sSql, args=args)
412
- self.mysql.commit()
413
- return True, rows
414
- except:
415
- self.mysql.rollback()
416
- sMsg = '* errSynax:' + traceback.format_exc()
417
- if errExit:
418
- self.logger.error(sMsg)
419
- sys.exit(-1)
420
- finally:
421
- self.mysql.commit()
422
- cur.close()
423
- if sMsg:
424
- self.logger.error(sMsg)
425
- return False, sMsg
426
-
427
- # 更新数据库状态
428
- def ExeSqlMany(self, sSql, args, errExit=True):
429
- """
430
- 该函数处理一个sql列表 没有返回并将列表置空
431
- :param conn:
432
- :param sSqlList:
433
- :return:
434
- """
435
-
436
- if not self.mysql:
437
- raise ValueError("database conn or database config must have to have one")
438
- if self.mysql.is_ping():
439
- self.mysql.reConnect()
440
- cur = self.mysql.get_new_cursor()
441
- try:
442
- self.logger.info(sSql + ";" + str(args))
443
- rows = cur.executemany(sSql, args=args)
444
- self.mysql.commit()
445
- return True, rows
446
- except:
447
- self.mysql.rollback()
448
- self.logger.error('*errSql:' + sSql)
449
- dbMsg = '*updateError:' + traceback.format_exc()
450
- if errExit:
451
- self.logger.error(dbMsg)
452
- sys.exit(-1)
453
- finally:
454
- self.mysql.commit()
455
- cur.close()
456
- if dbMsg:
457
- self.logger.error(dbMsg)
458
- return False, dbMsg
459
-
460
- def escape_string(self, string):
461
- return self.mysql.escape(string)
462
-
463
- def pymysql_escape_string(self, strings):
464
- return self.mysql.escape(strings)
465
-
466
- def close(self):
467
- self.mysql.db.close()
1
+ import sys
2
+ import traceback
3
+
4
+ import pymysql
5
+
6
+ from re_common.baselibrary import MLogger
7
+ from re_common.baselibrary.baseabs import BaseAbs
8
+ from re_common.baselibrary.database.mbuilder import MysqlBuilderAbstract
9
+ from re_common.baselibrary.database.moudle import SqlMoudle
10
+ from re_common.baselibrary.readconfig.ini_config import IniConfig
11
+ from re_common.baselibrary.readconfig.toml_config import TomlConfig
12
+
13
+
14
+ class MysqlBuilder(MysqlBuilderAbstract):
15
+ def __init__(self, configfile, configname, keytransformdicts=None):
16
+ # sql的moudle对象 mysql通过该对象对接参数
17
+ self.sqlmoudle = SqlMoudle()
18
+ # 获取配置文件对象
19
+ self.ic = IniConfig(configfile).builder()
20
+ # 配置文件位置
21
+ self.configfile = configfile
22
+ # 配置文件的sections
23
+ self.configname = configname
24
+ # 使用key转换器转换key(主要用于配置文件的key与我们默认读取时的key不一致)
25
+ self.keytransformdicts = keytransformdicts
26
+ """
27
+ python2
28
+ self.config.readfp(open(configfile, 'rb'))
29
+ python3
30
+ self.config.read_file(open(configfile, 'r'))
31
+ """
32
+
33
+ def build_port(self, port):
34
+ self.sqlmoudle.port = int(self.ic.get_value(self.configname, port))
35
+ return self
36
+
37
+ def build_server_address(self, host):
38
+ self.sqlmoudle.host = self.ic.get_value(self.configname, host)
39
+ return self
40
+
41
+ def build_password(self, passwd):
42
+ self.sqlmoudle.passwd = self.ic.get_value(self.configname, passwd)
43
+ return self
44
+
45
+ def use_db(self, db):
46
+ self.sqlmoudle.db = self.ic.get_value(self.configname, db)
47
+ return self
48
+
49
+ def build_username(self, user):
50
+ self.sqlmoudle.user = self.ic.get_value(self.configname, user)
51
+ return self
52
+
53
+ def build_chart(self, chartset):
54
+ self.sqlmoudle.charset = self.ic.get_value(self.configname, chartset)
55
+ return self
56
+
57
+ def build_cursorclass(self, cursornum):
58
+ if cursornum == 1:
59
+ self.sqlmoudle.cursorclass = pymysql.cursors.DictCursor
60
+ else:
61
+ # 默认保持不变
62
+ pass
63
+
64
+ return self
65
+
66
+ # def build_cursorclass(self,cursorclass):
67
+ # self.sqlmoudle.cursorclass = self.ic.get_value(self.configname, cursorclass)
68
+
69
+ def get_moudle(self):
70
+ """
71
+ 返回数据库连接需要的对象
72
+ :return:
73
+ """
74
+ return self.sqlmoudle
75
+
76
+ def build_all(self):
77
+ if not self.keytransformdicts:
78
+ # 不传入时不转换
79
+ self.keytransformdicts = {"port": "port", "host": "host", "passwd": "passwd", "user": "user", "db": "db",
80
+ "chartset": "chartset"}
81
+ self.build_port(self.keytransformdicts["port"])
82
+ self.build_server_address(self.keytransformdicts["host"])
83
+ self.build_password(self.keytransformdicts["passwd"])
84
+ self.build_username(self.keytransformdicts["user"])
85
+ self.use_db(self.keytransformdicts["db"])
86
+ self.build_chart(self.keytransformdicts["chartset"])
87
+ return self
88
+
89
+ def get_tuples(self):
90
+ return self.sqlmoudle.host, self.sqlmoudle.user, self.sqlmoudle.passwd, self.sqlmoudle.port
91
+
92
+
93
+ class MysqlBuilderForToml(MysqlBuilderAbstract):
94
+ def __init__(self, configfile, sesc, keytransformdicts=None):
95
+ # sql的moudle对象 mysql通过该对象对接参数
96
+ self.sqlmoudle = SqlMoudle()
97
+ # 获取配置文件对象
98
+ self.dic = TomlConfig(configfile).read_file_remove_bom().get_dicts()
99
+ # 配置文件位置
100
+ self.configfile = configfile
101
+ # 配置文件的sections
102
+ self.sesc = sesc
103
+ # 使用key转换器转换key(主要用于配置文件的key与我们默认读取时的key不一致)
104
+ self.keytransformdicts = keytransformdicts
105
+ """
106
+ python2
107
+ self.config.readfp(open(configfile, 'rb'))
108
+ python3
109
+ self.config.read_file(open(configfile, 'r'))
110
+ """
111
+
112
+ def build_port(self, port):
113
+ self.sqlmoudle.port = int(self.dic[self.sesc][port])
114
+ return self
115
+
116
+ def build_server_address(self, host):
117
+ self.sqlmoudle.host = self.dic[self.sesc][host]
118
+ return self
119
+
120
+ def build_password(self, passwd):
121
+ self.sqlmoudle.passwd = self.dic[self.sesc][passwd]
122
+ return self
123
+
124
+ def use_db(self, db):
125
+ self.sqlmoudle.db = self.dic[self.sesc][db]
126
+ return self
127
+
128
+ def build_username(self, user):
129
+ self.sqlmoudle.user = self.dic[self.sesc][user]
130
+ return self
131
+
132
+ def build_chart(self, chartset):
133
+ self.sqlmoudle.charset = self.dic[self.sesc][chartset]
134
+ return self
135
+
136
+ def build_cursorclass(self, cursornum):
137
+ if cursornum == 1:
138
+ self.sqlmoudle.cursorclass = pymysql.cursors.DictCursor
139
+ else:
140
+ # 默认保持不变
141
+ pass
142
+
143
+ return self
144
+
145
+ def get_moudle(self):
146
+ """
147
+ 返回数据库连接需要的对象
148
+ :return:
149
+ """
150
+ return self.sqlmoudle
151
+
152
+ def build_all(self):
153
+ if not self.keytransformdicts:
154
+ # 不传入时不转换
155
+ self.keytransformdicts = {"port": "port", "host": "host", "passwd": "passwd", "user": "user", "db": "db",
156
+ "chartset": "chartset"}
157
+ self.build_port(self.keytransformdicts["port"])
158
+ self.build_server_address(self.keytransformdicts["host"])
159
+ self.build_password(self.keytransformdicts["passwd"])
160
+ self.build_username(self.keytransformdicts["user"])
161
+ self.use_db(self.keytransformdicts["db"])
162
+ self.build_chart(self.keytransformdicts["chartset"])
163
+ return self
164
+
165
+ def get_tuples(self):
166
+ return self.sqlmoudle.host, self.sqlmoudle.user, self.sqlmoudle.passwd, self.sqlmoudle.port
167
+
168
+
169
+ class MysqlBuilderForDicts(MysqlBuilderAbstract):
170
+ def __init__(self, dicts, keytransformdicts=None):
171
+ # sql的moudle对象 mysql通过该对象对接参数
172
+ self.sqlmoudle = SqlMoudle()
173
+ self.dicts = dicts
174
+ # 使用key转换器转换key(主要用于配置文件的key与我们默认读取时的key不一致)
175
+ self.keytransformdicts = keytransformdicts
176
+
177
+ def build_port(self, port):
178
+ self.sqlmoudle.port = int(self.dicts[port])
179
+ return self
180
+
181
+ def build_server_address(self, host):
182
+ self.sqlmoudle.host = self.dicts[host]
183
+ return self
184
+
185
+ def build_password(self, passwd):
186
+ self.sqlmoudle.passwd = self.dicts[passwd]
187
+ return self
188
+
189
+ def use_db(self, db):
190
+ self.sqlmoudle.db = self.dicts[db]
191
+ return self
192
+
193
+ def build_username(self, user):
194
+ self.sqlmoudle.user = self.dicts[user]
195
+ return self
196
+
197
+ def build_chart(self, chartset):
198
+ self.sqlmoudle.charset = self.dicts[chartset]
199
+ return self
200
+
201
+ def build_cursorclass(self, cursornum):
202
+ if cursornum == 1:
203
+ self.sqlmoudle.cursorclass = pymysql.cursors.DictCursor
204
+ else:
205
+ # 默认保持不变
206
+ pass
207
+
208
+ return self
209
+
210
+ def get_moudle(self):
211
+ """
212
+ 返回数据库连接需要的对象
213
+ :return:
214
+ """
215
+ return self.sqlmoudle
216
+
217
+ def build_all(self):
218
+ if not self.keytransformdicts:
219
+ # 不传入时不转换
220
+ self.keytransformdicts = {"port": "port", "host": "host", "passwd": "passwd", "user": "user", "db": "db",
221
+ "chartset": "chartset"}
222
+ self.build_port(self.keytransformdicts["port"])
223
+ self.build_server_address(self.keytransformdicts["host"])
224
+ self.build_password(self.keytransformdicts["passwd"])
225
+ self.build_username(self.keytransformdicts["user"])
226
+ self.use_db(self.keytransformdicts["db"])
227
+ self.build_chart(self.keytransformdicts["chartset"])
228
+ return self
229
+
230
+ def get_tuples(self):
231
+ return self.sqlmoudle.host, self.sqlmoudle.user, self.sqlmoudle.passwd, self.sqlmoudle.port
232
+
233
+
234
+ class MysqlUtiles(object):
235
+ def __init__(self, cfgfilepath, sesc, logger=None, keytransformdicts=None, builder="MysqlBuilder", cursorsnum=0,
236
+ dicts=None):
237
+ """
238
+
239
+ :param cfgfilepath:
240
+ :param sesc:
241
+ :param logger:
242
+ :param keytransformdicts:
243
+ :param builder:
244
+ :param cursors: 0表示默认,1 表示dicts 其他情况后面再添加
245
+ """
246
+ self._logger = logger
247
+ # 通过工厂方法获取mysql对象
248
+ self.mysql = BaseAbs.get_sql_factory().mysql_factory("mysql")
249
+ # mysql 连接通过builder进行适配 这里的builder通过配置文件获取相关连接信息
250
+ # 也可以通过继承 MysqlBuilderAbstract 后自己手动设置builer
251
+ if builder == "MysqlBuilder":
252
+ self.builder = MysqlBuilder(cfgfilepath, sesc, keytransformdicts)
253
+ elif builder == "MysqlBuilderForToml":
254
+ self.builder = MysqlBuilderForToml(cfgfilepath, sesc, keytransformdicts)
255
+ elif builder == "MysqlBuilderForDicts":
256
+ self.builder = MysqlBuilderForDicts(dicts, keytransformdicts)
257
+ else:
258
+ raise Exception("传入builder 参数有误")
259
+ self.builder = self.builder.build_all().build_cursorclass(cursorsnum)
260
+ self.moudle = self.builder.get_moudle()
261
+ # 连接mysql通过唯一适配moudle
262
+ # print(self.moudle.to_dict())
263
+ self.mysql.link(self.moudle)
264
+
265
+ @property
266
+ def logger(self):
267
+ if self._logger is None:
268
+ self._logger = MLogger().streamlogger
269
+ return self._logger
270
+
271
+ @logger.setter
272
+ def logger(self, value):
273
+ assert isinstance(value, MLogger)
274
+ self._logger = value
275
+
276
+ # 更新数据库状态
277
+ def ExeSqlListToDB(self, sSqlList, errExit=True, args=None):
278
+ """
279
+ 该函数处理一个sql列表 没有返回并将列表置空
280
+ :param sSqlList:
281
+ :return:
282
+ """
283
+ dbMsg = None
284
+ if not self.mysql:
285
+ raise ValueError("database conn or database config must have to have one")
286
+ if not self.mysql.is_ping():
287
+ self.mysql.reConnect()
288
+ cursor = self.mysql.get_new_cursor()
289
+ errcount = 0
290
+ successcount = 0
291
+ for sql in sSqlList:
292
+ try:
293
+ self.logger.info(sql + ";" + str(args))
294
+ cursor.execute(sql, args=args)
295
+ successcount += 1
296
+ except:
297
+ errcount += 1
298
+ self.mysql.commit()
299
+ self.logger.error('*errSql:' + sql)
300
+ dbMsg = '*updateError:' + traceback.format_exc()
301
+ if errExit:
302
+ self.logger.error(dbMsg)
303
+ sys.exit(-1)
304
+ if dbMsg:
305
+ self.logger.error(dbMsg)
306
+ self.mysql.commit()
307
+ cursor.close()
308
+ if errcount:
309
+ return False, successcount, errcount
310
+ else:
311
+ return True, successcount, errcount
312
+
313
+ def SelectFromDB(self, sSql, errExit=True, args=None):
314
+ """
315
+ 使用sql语句查询并返回结果列表
316
+ :param sql:
317
+ :return:
318
+ """
319
+ if not self.mysql:
320
+ raise ValueError("database conn or database config must have to have one")
321
+ if self.mysql.is_ping():
322
+ self.mysql.reConnect()
323
+ cursor = self.mysql.get_new_cursor()
324
+ try:
325
+ self.logger.info(sSql + ";" + str(args))
326
+ result = cursor.execute(sSql, args=args)
327
+ rows = cursor.fetchall()
328
+ return True, rows
329
+ except:
330
+ self.logger.error('* errSql:' + sSql)
331
+ sMsg = '* errSynax:' + traceback.format_exc()
332
+ if errExit:
333
+ self.logger.error(sMsg)
334
+ sys.exit(-1)
335
+ finally:
336
+ self.mysql.commit()
337
+ cursor.close()
338
+ if sMsg:
339
+ self.logger.error(sMsg)
340
+ return False, sMsg
341
+
342
+ def SelectFromDBFetchOne_noyield(self, sSql, errExit=True, args=None):
343
+ """
344
+ 使用sql语句查询并返回结果列表
345
+ :param sql:
346
+ :return:
347
+ """
348
+ if not self.mysql:
349
+ raise ValueError("database conn or database config must have to have one")
350
+ if self.mysql.is_ping():
351
+ self.mysql.reConnect()
352
+ cur = self.mysql.get_new_cursor()
353
+ try:
354
+ self.logger.info(sSql + ";" + str(args))
355
+ result = cur.execute(sSql, args=args)
356
+ return True, cur.fetchone()
357
+ except:
358
+ self.logger.error('* errSql:' + sSql)
359
+ sMsg = '* errSynax:' + traceback.format_exc()
360
+ if errExit:
361
+ self.logger.error(sMsg)
362
+ sys.exit(-1)
363
+ finally:
364
+ self.mysql.commit()
365
+ cur.close()
366
+ if sMsg:
367
+ self.logger.error(sMsg)
368
+ return False, sMsg
369
+
370
+ def SelectFromDBFetchOne(self, sSql, errExit=True, args=None):
371
+ """
372
+ 使用sql语句查询并返回结果列表
373
+ :param sql:
374
+ :return:
375
+ """
376
+ if not self.mysql:
377
+ raise ValueError("database conn or database config must have to have one")
378
+ if self.mysql.is_ping():
379
+ self.mysql.reConnect()
380
+ cur = self.mysql.get_new_cursor()
381
+ try:
382
+ self.logger.info(sSql + ";" + str(args))
383
+ result = cur.execute(sSql, args=args)
384
+ while True:
385
+ row = cur.fetchone()
386
+ if row is None:
387
+ return None
388
+ else:
389
+ yield row
390
+ except:
391
+ self.logger.error('* errSql:' + sSql)
392
+ sMsg = '* errSynax:' + traceback.format_exc()
393
+ if errExit:
394
+ self.logger.error(sMsg)
395
+ sys.exit(-1)
396
+ finally:
397
+ self.mysql.commit()
398
+ cur.close()
399
+ if sMsg:
400
+ self.logger.error(sMsg)
401
+ return None
402
+
403
+ def ExeSqlToDB(self, sSql, errExit=True, args=None):
404
+ if not self.mysql:
405
+ raise ValueError("database conn or database config must have to have one")
406
+ if self.mysql.is_ping():
407
+ self.mysql.reConnect()
408
+ cur = self.mysql.get_new_cursor()
409
+ try:
410
+ self.logger.info(sSql + ";" + str(args))
411
+ rows = cur.execute(sSql, args=args)
412
+ self.mysql.commit()
413
+ return True, rows
414
+ except:
415
+ self.mysql.rollback()
416
+ sMsg = '* errSynax:' + traceback.format_exc()
417
+ if errExit:
418
+ self.logger.error(sMsg)
419
+ sys.exit(-1)
420
+ finally:
421
+ self.mysql.commit()
422
+ cur.close()
423
+ if sMsg:
424
+ self.logger.error(sMsg)
425
+ return False, sMsg
426
+
427
+ # 更新数据库状态
428
+ def ExeSqlMany(self, sSql, args, errExit=True):
429
+ """
430
+ 该函数处理一个sql列表 没有返回并将列表置空
431
+ :param conn:
432
+ :param sSqlList:
433
+ :return:
434
+ """
435
+
436
+ if not self.mysql:
437
+ raise ValueError("database conn or database config must have to have one")
438
+ if self.mysql.is_ping():
439
+ self.mysql.reConnect()
440
+ cur = self.mysql.get_new_cursor()
441
+ try:
442
+ self.logger.info(sSql + ";" + str(args))
443
+ rows = cur.executemany(sSql, args=args)
444
+ self.mysql.commit()
445
+ return True, rows
446
+ except:
447
+ self.mysql.rollback()
448
+ self.logger.error('*errSql:' + sSql)
449
+ dbMsg = '*updateError:' + traceback.format_exc()
450
+ if errExit:
451
+ self.logger.error(dbMsg)
452
+ sys.exit(-1)
453
+ finally:
454
+ self.mysql.commit()
455
+ cur.close()
456
+ if dbMsg:
457
+ self.logger.error(dbMsg)
458
+ return False, dbMsg
459
+
460
+ def escape_string(self, string):
461
+ return self.mysql.escape(string)
462
+
463
+ def pymysql_escape_string(self, strings):
464
+ return self.mysql.escape(strings)
465
+
466
+ def close(self):
467
+ self.mysql.db.close()