test4.py 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import json
  4. from datetime import datetime
  5. from datetime import date
  6. import itertools
  7. __author__ = 'ethereal'
  8. __mtime__ = '2019/3/29'
  9. # a = {'concede_size': {'3078257': {'concede_home_rule': ['-0/0.5', ''], 'concede_home': ['1.03', '0.00'], 'concede_guest_rule': ['+0/0.5', ''], 'concede_guest': ['0.81', '0.00'], 'half_concede_home_rule': '', 'half_concede_home': '', 'half_concede_guest_rule': '', 'half_concede_guest': '', 'size_home_rule': ['6', '5.5/6'], 'size_home': ['0.99', '0.64'], 'size_guest_rule': ['6', '5.5/6'], 'size_guest': ['0.83', '1.21'], 'half_size_guest': '', 'half_size_guest_rule': '', 'half_size_home': '', 'half_size_home_rule': '', 'league_id': 28188, 'league_name': '哥斯达黎加甲组联赛', 'game_id': '3078257', 'team_home': '佩雷斯泽内度', 'team_guest': '阿拉伦斯', 'number': '4', 'time_game': '63:36', 'corner_ball': '', 'score_home': '2', 'score_guest': '3', 'half_way': '下半场'}}, 'capot': {'3078257': {'capot_home': '', 'capot_guest': '', 'capot_dogfall': '', 'half_capot_home': '', 'half_capot_guest': '', 'half_capot_dogfall': '', 'league_id': 28188, 'league_name': '哥斯达黎加甲组联赛', 'game_id': '3078257', 'team_home': '佩雷斯泽内度', 'team_guest': '阿拉伦斯', 'number': '4', 'data_game': '28 / 03', 'time_game': '63:36', 'corner_ball': '', 'score_home': '2', 'score_guest': '3', 'half_way': '下半场'}}, 'odd_even': {'3078257': {'odd_even_odd': '', 'odd_even_even': '', 'half_odd_even_odd': '', 'half_odd_even_even': '', 'league_id': 28188, 'league_name': '哥斯达黎加甲组联赛', 'game_id': '3078257', 'team_home': '佩雷斯泽内度', 'team_guest': '阿拉伦斯', 'number': '4', 'data_game': '28 / 03', 'time_game': '63:36', 'corner_ball': '', 'score_home': '2', 'score_guest': '3', 'half_way': '下半场'}}, 'total_goal': {'3078257': {'total_goal_zero': '', 'total_goal_two': '', 'total_goal_four': '', 'total_goal_seven': '', 'half_total_goal_zero': '', 'half_total_goal_one': '', 'half_total_goal_two': '', 'half_total_goal_three': '', 'league_id': 28188, 'league_name': '哥斯达黎加甲组联赛', 'game_id': '3078257', 'team_home': '佩雷斯泽内度', 'team_guest': '阿拉伦斯', 'number': '4', 'data_game': '28 / 03', 'time_game': '63:36', 'corner_ball': '', 'score_home': '2', 'score_guest': '3', 'half_way': '下半场'}}, 'half_full': {'3078257': {'half_full_home_home': '', 'half_full_home_dogfall': '', 'half_full_home_guest': '', 'half_full_dogfall_home': '', 'half_full_dogfall_dogfall': '', 'half_full_dogfall_guest': '', 'half_full_guest_home': '', 'half_full_guest_dogfall': '', 'half_full_guest_guest': '', 'league_id': 28188, 'league_name': '哥斯达黎加甲组联赛', 'game_id': '3078257', 'team_home': '佩雷斯泽内度', 'team_guest': '阿拉伦斯', 'number': '4', 'data_game': '28 / 03', 'time_game': '63:36', 'corner_ball': '', 'score_home': '2', 'score_guest': '3', 'half_way': '下半场'}}, 'bodan': {'3078257': {'bodan': '', 'half_bodan': '', 'league_id': 28188, 'league_name': '哥斯达黎加甲组联赛', 'game_id': '3078257', 'team_home': '佩雷斯泽内度', 'team_guest': '阿拉伦斯', 'number': '4', 'data_game': '28 / 03', 'time_game': '63:36', 'corner_ball': '', 'score_home': '2', 'score_guest': '3', 'half_way': '下半场'}}, 'first_last_ball': {'3078257': {'first_ball_home': '', 'first_ball_guest': '', 'last_ball_home': '', 'last_ball_guest': '', 'not_ball': '', 'league_id': 28188, 'league_name': '哥斯达黎加甲组联赛', 'game_id': '3078257', 'team_home': '佩雷斯泽内度', 'team_guest': '阿拉伦斯', 'number': '4', 'data_game': '28 / 03', 'time_game': '63:36', 'corner_ball': '', 'score_home': '2', 'score_guest': '3', 'half_way': '下半场'}}}
  10. # c = json.dumps(a,ensure_ascii=False)
  11. # print(c)
  12. # concede_size
  13. # with open('test.json','r') as f:
  14. # for line in f:
  15. # temp = json.loads(line)
  16. # print(temp)
  17. # 二级页面url= http://hg3535z.com/odds2/d/getamodds?eid=3108814&iip=true&ubt=am&isp=false
  18. # from xpinyin import Pinyin
  19. # wordvalue = "ATP美国女子网球公开赛2019"
  20. # p = Pinyin()
  21. # s = p.get_initials(wordvalue, u'').lower()
  22. # print(s)
  23. # import time
  24. # utime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time() + 60))
  25. # print(utime)
  26. # a = {
  27. # "i": [true, 4, 3110520, 2, 1, "sh", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "14 / 04", "", "", false, true, "棒球", 0],
  28. # "eg": {
  29. # "c": {
  30. # "k": 29400,
  31. # "n": "美国职业棒球"
  32. # },
  33. # "es": [{
  34. # "dbg": false,
  35. # "egid": 0,
  36. # "g": "",
  37. # "i": ["亚特兰大勇士队", "纽约大都会队", "9", "True", "14 / 04", "", "9", "False", "0", "0", "2", "1", "", "", "", "", 0, "", "", 16, "True"],
  38. # "ibs": true,
  39. # "ibsc": false,
  40. # "k": 3110520,
  41. # "o": {
  42. # "ah": {
  43. # "s": 1,
  44. # "v": ["h3164784133", "-1.5", "h3164784134", "+1.5", "o3164784133", "1.33", "o3164784134", "0.55"],
  45. # "n": "滚球 让球"
  46. # },
  47. # "ou": {
  48. # "s": 2,
  49. # "v": ["h3164784135", "6.5", "h3164784136", "6.5", "o3164784135", "0.70", "o3164784136", "1.04"],
  50. # "n": "总得分:滚球 大 / 小"
  51. # },
  52. # "oe": {
  53. # "s": 6,
  54. # "v": ["o3164784137", "0.51", "o3164784138", "1.58"],
  55. # "n": "总得分:滚球 单 / 双"
  56. # },
  57. # "ml": {
  58. # "s": 5,
  59. # "v": ["o3164784139", "0.00", "o3164784140", "0.00"],
  60. # "n": "滚球 独赢盘"
  61. # }
  62. # },
  63. # "p-o": [{
  64. # "n": "净胜球数",
  65. # "st": "ha",
  66. # "mgk": 9,
  67. # "s": 7,
  68. # "k": 301,
  69. # "o": [
  70. # ["亚特兰大勇士队-赢得1分", "o3164784186", "3.15", "0"],
  71. # ["亚特兰大勇士队-赢得2分", "o3164784187", "5.5", "3"],
  72. # ["亚特兰大勇士队-赢得3分", "o3164784188", "9.5", "6"],
  73. # ["亚特兰大勇士队-赢得4分或更多", "o3164784189", "7.5", "9"],
  74. # ["纽约大都会队-赢得1分", "o3164784190", "5.0", "2"],
  75. # ["纽约大都会队-赢得2分", "o3164784191", "7.5", "5"],
  76. # ["纽约大都会队-赢得3分", "o3164784192", "11.5", "8"],
  77. # ["纽约大都会队-赢得4分或更多", "o3164784193", "10.0", "11"]
  78. # ]
  79. # }, {
  80. # "n": "第6局获胜者",
  81. # "st": "ha",
  82. # "mgk": 0,
  83. # "s": 3000,
  84. # "k": 4000,
  85. # "o": [
  86. # ["和局", "o3164784213", "1.50"],
  87. # ["亚特兰大勇士队", "o3164784214", "5.5"],
  88. # ["纽约大都会队", "o3164784215", "3.80"]
  89. # ]
  90. # }, {
  91. # "n": "加时",
  92. # "st": "ha",
  93. # "mgk": 312,
  94. # "s": 8,
  95. # "k": 13520,
  96. # "o": [
  97. # ["是", "o3164784228", "6.0"],
  98. # ["不是", "o3164784229", "1.09"]
  99. # ]
  100. # }],
  101. # "pci": {
  102. # "ctid": 0
  103. # },
  104. # "sb": {
  105. # "fb": false,
  106. # "sb": false,
  107. # "tb": false,
  108. # "ot": 0,
  109. # "ps": [{
  110. # "adv": -1,
  111. # "a": 1.0,
  112. # "e": 3110520,
  113. # "h": 2.0,
  114. # "p": "ft"
  115. # }, {
  116. # "adv": -1,
  117. # "a": 0.0,
  118. # "e": 3110520,
  119. # "h": 0.0,
  120. # "p": "ot"
  121. # }, {
  122. # "adv": -1,
  123. # "a": 0.0,
  124. # "e": 3110520,
  125. # "h": 0.0,
  126. # "p": "i1"
  127. # }, {
  128. # "adv": -1,
  129. # "a": 1.0,
  130. # "e": 3110520,
  131. # "h": 1.0,
  132. # "p": "i2"
  133. # }, {
  134. # "adv": -1,
  135. # "a": 0.0,
  136. # "e": 3110520,
  137. # "h": 1.0,
  138. # "p": "i3"
  139. # }, {
  140. # "adv": -1,
  141. # "a": 0.0,
  142. # "e": 3110520,
  143. # "h": 0.0,
  144. # "p": "i4"
  145. # }, {
  146. # "adv": -1,
  147. # "a": 0.0,
  148. # "e": 3110520,
  149. # "h": 0.0,
  150. # "p": "i5"
  151. # }, {
  152. # "adv": -1,
  153. # "a": 0.0,
  154. # "e": 3110520,
  155. # "h": 0.0,
  156. # "p": "i6"
  157. # }, {
  158. # "adv": -1,
  159. # "a": 0.0,
  160. # "e": 3110520,
  161. # "h": 0.0,
  162. # "p": "i7"
  163. # }, {
  164. # "adv": -1,
  165. # "a": 0.0,
  166. # "e": 3110520,
  167. # "h": 0.0,
  168. # "p": "i8"
  169. # }, {
  170. # "adv": -1,
  171. # "a": 0.0,
  172. # "e": 3110520,
  173. # "h": 0.0,
  174. # "p": "i9"
  175. # }],
  176. # "a": 1,
  177. # "h": 2,
  178. # "k": 3110520,
  179. # "iwd": false,
  180. # "ls": -1,
  181. # "s": 1,
  182. # "ts": 0,
  183. # "tt": 0,
  184. # "ct": "00:00",
  185. # "cp": "i5"
  186. # },
  187. # "egn": ""
  188. # }, {
  189. # "dbg": false,
  190. # "egid": 0,
  191. # "g": "",
  192. # "i": ["ATL Braves - Team Runs - Over", "ATL Braves - Team Runs - Under", "9", "True", "14 / 04", "", "9", "False", "0", "0", "2", "0", "", "", "", "", 0, "", "", 16, "True"],
  193. # "ibs": true,
  194. # "ibsc": false,
  195. # "k": 3110522,
  196. # "o": {
  197. # "ou": {
  198. # "s": 3,
  199. # "v": ["h3164784242", "3.5", "h3164784243", "3.5", "o3164784242", "1.12", "o3164784243", "0.63"],
  200. # "n": "球队得分:亚特兰大勇士队-滚球 大 / 小"
  201. # }
  202. # },
  203. # "pci": {
  204. # "ctid": 208,
  205. # "ctn": "球队得分"
  206. # },
  207. # "egn": ""
  208. # }, {
  209. # "dbg": false,
  210. # "egid": 0,
  211. # "g": "",
  212. # "i": ["NY Mets - Team Runs - Over", "NY Mets - Team Runs - Under", "9", "True", "14 / 04", "", "9", "False", "0", "0", "1", "0", "", "", "", "", 0, "", "", 16, "True"],
  213. # "ibs": true,
  214. # "ibsc": false,
  215. # "k": 3110524,
  216. # "o": {
  217. # "ou": {
  218. # "s": 4,
  219. # "v": ["h3164784261", "2.5", "h3164784263", "2.5", "o3164784261", "0.55", "o3164784263", "1.23"],
  220. # "n": "球队得分:纽约大都会队-滚球 大 / 小"
  221. # }
  222. # },
  223. # "pci": {
  224. # "ctid": 209,
  225. # "ctn": "球队得分"
  226. # },
  227. # "egn": ""
  228. # }]
  229. # },
  230. # "ot": 2,
  231. # "sc": {
  232. # "3110520": {
  233. # "a": 1,
  234. # "h": 2
  235. # },
  236. # "3110522": {
  237. # "a": 0,
  238. # "h": 2
  239. # },
  240. # "3110524": {
  241. # "a": 0,
  242. # "h": 1
  243. # }
  244. # },
  245. # "v": 40576
  246. # }
  247. # print(a)
  248. # data = {
  249. # "i": ['true', 4, 3110520, 2, 1, "sh", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "14 / 04", "", "", 'false', 'true', "棒球", 0],
  250. # "eg": {
  251. # "c": {
  252. # "k": 29400,
  253. # "n": "美国职业棒球"
  254. # },
  255. # "es": [{
  256. # "dbg": 'false',
  257. # "egid": 0,
  258. # "g": "",
  259. # "i": ["亚特兰大勇士队", "纽约大都会队", "9", "True", "14 / 04", "", "9", "False", "0", "0", "2", "1", "", "", "", "", 0, "", "", 16, "True"],
  260. # "ibs": 'true',
  261. # "ibsc": 'false',
  262. # "k": 3110520,
  263. # "o": {
  264. # "ah": {
  265. # "s": 1,
  266. # "v": ["h3164784133", "-1.5", "h3164784134", "+1.5", "o3164784133", "1.33", "o3164784134", "0.55"],
  267. # "n": "滚球 让球"
  268. # },
  269. # "ou": {
  270. # "s": 2,
  271. # "v": ["h3164784135", "6.5", "h3164784136", "6.5", "o3164784135", "0.70", "o3164784136", "1.04"],
  272. # "n": "总得分:滚球 大 / 小"
  273. # },
  274. # "oe": {
  275. # "s": 6,
  276. # "v": ["o3164784137", "0.51", "o3164784138", "1.58"],
  277. # "n": "总得分:滚球 单 / 双"
  278. # },
  279. # "ml": {
  280. # "s": 5,
  281. # "v": ["o3164784139", "0.00", "o3164784140", "0.00"],
  282. # "n": "滚球 独赢盘"
  283. # }
  284. # },
  285. # "p-o": [{
  286. # "n": "净胜球数",
  287. # "st": "ha",
  288. # "mgk": 9,
  289. # "s": 7,
  290. # "k": 301,
  291. # "o": [
  292. # ["亚特兰大勇士队-赢得1分", "o3164784186", "3.15", "0"],
  293. # ["亚特兰大勇士队-赢得2分", "o3164784187", "5.5", "3"],
  294. # ["亚特兰大勇士队-赢得3分", "o3164784188", "9.5", "6"],
  295. # ["亚特兰大勇士队-赢得4分或更多", "o3164784189", "7.5", "9"],
  296. # ["纽约大都会队-赢得1分", "o3164784190", "5.0", "2"],
  297. # ["纽约大都会队-赢得2分", "o3164784191", "7.5", "5"],
  298. # ["纽约大都会队-赢得3分", "o3164784192", "11.5", "8"],
  299. # ["纽约大都会队-赢得4分或更多", "o3164784193", "10.0", "11"]
  300. # ]
  301. # }, {
  302. # "n": "第6局获胜者",
  303. # "st": "ha",
  304. # "mgk": 0,
  305. # "s": 3000,
  306. # "k": 4000,
  307. # "o": [
  308. # ["和局", "o3164784213", "1.50"],
  309. # ["亚特兰大勇士队", "o3164784214", "5.5"],
  310. # ["纽约大都会队", "o3164784215", "3.80"]
  311. # ]
  312. # }, {
  313. # "n": "加时",
  314. # "st": "ha",
  315. # "mgk": 312,
  316. # "s": 8,
  317. # "k": 13520,
  318. # "o": [
  319. # ["是", "o3164784228", "6.0"],
  320. # ["不是", "o3164784229", "1.09"]
  321. # ]
  322. # }],
  323. # "pci": {
  324. # "ctid": 0
  325. # },
  326. # "sb": {
  327. # "fb": 'false',
  328. # "sb": 'false',
  329. # "tb": 'false',
  330. # "ot": 0,
  331. # "ps": [{
  332. # "adv": -1,
  333. # "a": 1.0,
  334. # "e": 3110520,
  335. # "h": 2.0,
  336. # "p": "ft"
  337. # }, {
  338. # "adv": -1,
  339. # "a": 0.0,
  340. # "e": 3110520,
  341. # "h": 0.0,
  342. # "p": "ot"
  343. # }, {
  344. # "adv": -1,
  345. # "a": 0.0,
  346. # "e": 3110520,
  347. # "h": 0.0,
  348. # "p": "i1"
  349. # }, {
  350. # "adv": -1,
  351. # "a": 1.0,
  352. # "e": 3110520,
  353. # "h": 1.0,
  354. # "p": "i2"
  355. # }, {
  356. # "adv": -1,
  357. # "a": 0.0,
  358. # "e": 3110520,
  359. # "h": 1.0,
  360. # "p": "i3"
  361. # }, {
  362. # "adv": -1,
  363. # "a": 0.0,
  364. # "e": 3110520,
  365. # "h": 0.0,
  366. # "p": "i4"
  367. # }, {
  368. # "adv": -1,
  369. # "a": 0.0,
  370. # "e": 3110520,
  371. # "h": 0.0,
  372. # "p": "i5"
  373. # }, {
  374. # "adv": -1,
  375. # "a": 0.0,
  376. # "e": 3110520,
  377. # "h": 0.0,
  378. # "p": "i6"
  379. # }, {
  380. # "adv": -1,
  381. # "a": 0.0,
  382. # "e": 3110520,
  383. # "h": 0.0,
  384. # "p": "i7"
  385. # }, {
  386. # "adv": -1,
  387. # "a": 0.0,
  388. # "e": 3110520,
  389. # "h": 0.0,
  390. # "p": "i8"
  391. # }, {
  392. # "adv": -1,
  393. # "a": 0.0,
  394. # "e": 3110520,
  395. # "h": 0.0,
  396. # "p": "i9"
  397. # }],
  398. # "a": 1,
  399. # "h": 2,
  400. # "k": 3110520,
  401. # "iwd": 'false',
  402. # "ls": -1,
  403. # "s": 1,
  404. # "ts": 0,
  405. # "tt": 0,
  406. # "ct": "00:00",
  407. # "cp": "i5"
  408. # },
  409. # "egn": ""
  410. # }, {
  411. # "dbg": 'false',
  412. # "egid": 0,
  413. # "g": "",
  414. # "i": ["ATL Braves - Team Runs - Over", "ATL Braves - Team Runs - Under", "9", "True", "14 / 04", "", "9", "False", "0", "0", "2", "0", "", "", "", "", 0, "", "", 16, "True"],
  415. # "ibs": 'true',
  416. # "ibsc": 'false',
  417. # "k": 3110522,
  418. # "o": {
  419. # "ou": {
  420. # "s": 3,
  421. # "v": ["h3164784242", "3.5", "h3164784243", "3.5", "o3164784242", "1.12", "o3164784243", "0.63"],
  422. # "n": "球队得分:亚特兰大勇士队-滚球 大 / 小"
  423. # }
  424. # },
  425. # "pci": {
  426. # "ctid": 208,
  427. # "ctn": "球队得分"
  428. # },
  429. # "egn": ""
  430. # }, {
  431. # "dbg": 'false',
  432. # "egid": 0,
  433. # "g": "",
  434. # "i": ["NY Mets - Team Runs - Over", "NY Mets - Team Runs - Under", "9", "True", "14 / 04", "", "9", "False", "0", "0", "1", "0", "", "", "", "", 0, "", "", 16, "True"],
  435. # "ibs": 'true',
  436. # "ibsc": 'false',
  437. # "k": 3110524,
  438. # "o": {
  439. # "ou": {
  440. # "s": 4,
  441. # "v": ["h3164784261", "2.5", "h3164784263", "2.5", "o3164784261", "0.55", "o3164784263", "1.23"],
  442. # "n": "球队得分:纽约大都会队-滚球 大 / 小"
  443. # }
  444. # },
  445. # "pci": {
  446. # "ctid": 209,
  447. # "ctn": "球队得分"
  448. # },
  449. # "egn": ""
  450. # }]
  451. # },
  452. # "ot": 2,
  453. # "sc": {
  454. # "3110520": {
  455. # "a": 1,
  456. # "h": 2
  457. # },
  458. # "3110522": {
  459. # "a": 0,
  460. # "h": 2
  461. # },
  462. # "3110524": {
  463. # "a": 0,
  464. # "h": 1
  465. # }
  466. # },
  467. # "v": 40576
  468. # }
  469. # c = json.dumps(data)
  470. # print(c)
  471. import jsonpath
  472. import requests
  473. # ids = jsonpath.jsonpath(res, '$..i-ot[0]..egs..es..i[16]') # ids新列表
  474. # try:
  475. # url = "http://sports.5gogo.com/sports/MatchList/getOddsCode"
  476. # res = requests.get(url)
  477. # if res.status_code == 200:
  478. # res = res.json()
  479. # # res = res.text
  480. # # print(res)
  481. # odds_code = jsonpath.jsonpath(res, '$..data..odds_code')#递归取出odds_code 形成列表
  482. # p_id = jsonpath.jsonpath(res, '$..data..odds_code') # 递归取出p_id 形成列表
  483. # # print(len(odds_code))
  484. # # print(len(p_id))
  485. # a = zip(odds_code,p_id) #传递可迭代对象生成
  486. # print(dict(a))
  487. # except:
  488. # print('111111111111111111111111')
  489. # pass
  490. # a = [{'match_id': 3142618, 'create_time': '2019-04-26 10:56:32', 'status': 1, 'ball_type': '棒球'}, {'match_id': 3142621, 'create_time': '2019-04-26 10:56:32', 'status': 1, 'ball_type': '棒球'}]
  491. #
  492. # for i in a:
  493. # # print(i)
  494. # print(i['match_id'])
  495. import psycopg2
  496. import time
  497. from functools import wraps
  498. from contextlib import contextmanager
  499. import psycopg2.extras
  500. # 测试一个函数的运行时间,使用方式:在待测函数直接添加此修饰器
  501. def timethis(func):
  502. @wraps(func)
  503. def wrapper(*args, **kwargs):
  504. start = time.perf_counter()
  505. r = func(*args, **kwargs)
  506. end = time.perf_counter()
  507. print('\n============================================================')
  508. print('{}.{} : {}'.format(func.__module__, func.__name__, end - start))
  509. print('============================================================\n')
  510. return r
  511. return wrapper
  512. # 测试一段代码运行的时间,使用方式:上下文管理器with
  513. # with timeblock('block_name'):
  514. # your_code_block...
  515. @contextmanager
  516. def timeblock(label='Code'):
  517. start = time.perf_counter()
  518. try:
  519. yield
  520. finally:
  521. end = time.perf_counter()
  522. print('==============================================================')
  523. print('{} run time: {}'.format(label, end - start))
  524. print('==============================================================')
  525. class SqlConn():
  526. '''
  527. 连接数据库,以及进行一些操作的封装
  528. '''
  529. sql_name = ''
  530. database = ''
  531. user = ''
  532. password = ''
  533. port = 0
  534. host = ''
  535. # 创建连接、游标
  536. def __init__(self, *args, **kwargs):
  537. if kwargs.get("sql_name"):
  538. self.sql_name = kwargs.get("sql_name")
  539. if kwargs.get("database"):
  540. self.database = kwargs.get("database")
  541. if kwargs.get("user"):
  542. self.user = kwargs.get("user")
  543. if kwargs.get("password"):
  544. self.password = kwargs.get("password")
  545. if kwargs.get("port"):
  546. self.port = kwargs.get("port")
  547. if kwargs.get("host"):
  548. self.host = kwargs.get("host")
  549. if not (self.host and self.port and self.user and
  550. self.password and self.database):
  551. raise Warning("conn_error, missing some params!")
  552. sql_conn = {
  553. 'postgresql': psycopg2,
  554. }
  555. self.conn = sql_conn[self.sql_name].connect(host=self.host,
  556. port=self.port,
  557. user=self.user,
  558. password=self.password,
  559. database=self.database,
  560. )
  561. self.cursor = self.conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
  562. if not self.cursor:
  563. raise Warning("conn_error!")
  564. # 测试连接
  565. def test_conn(self):
  566. if self.cursor:
  567. print("conn success!")
  568. else:
  569. print('conn error!')
  570. # 单条语句的并提交
  571. def execute(self, sql_code):
  572. self.cursor.execute(sql_code)
  573. self.conn.commit()
  574. # 单条语句的不提交
  575. def execute_no_conmmit(self, sql_code):
  576. self.cursor.execute(sql_code)
  577. # 构造多条语句,使用%s参数化,对于每个list都进行替代构造
  578. def excute_many(self, sql_base, param_list):
  579. self.cursor.executemany(sql_base, param_list)
  580. # 批量执行(待完善)
  581. def batch_execute(self, sql_code):
  582. pass
  583. # 获取数据
  584. def get_data(self, sql_code, count=0):
  585. self.cursor.execute(sql_code)
  586. if int(count):
  587. return self.cursor.fetchmany(count)
  588. else:
  589. return self.cursor.fetchall()
  590. # 更新数据
  591. def updata_data(self, sql_code):
  592. self.cursor(sql_code)
  593. # 插入数据
  594. def insert_data(self, sql_code):
  595. self.cursor(sql_code)
  596. # 滚动游标
  597. def cursor_scroll(self, count, mode='relative'):
  598. self.cursor.scroll(count, mode=mode)
  599. # 提交
  600. def commit(self):
  601. self.conn.commit()
  602. # 回滚
  603. def rollback(self):
  604. self.conn.rollback()
  605. # 关闭连接
  606. def close_conn(self):
  607. self.cursor.close()
  608. self.conn.close()
  609. class ComplexEncoder(json.JSONEncoder):
  610. def default(self, obj):
  611. if isinstance(obj, datetime):
  612. return obj.strftime('%Y-%m-%d %H:%M:%S')
  613. elif isinstance(obj, date):
  614. return obj.strftime('%Y-%m-%d')
  615. else:
  616. return json.JSONEncoder.default(self, obj)
  617. a = SqlConn(sql_name='postgresql',host='127.0.0.1',port=5432,user='postgres',password='9998877',database='postgres')
  618. a.test_conn()
  619. b = a.get_data("select match_id from st_ball_status2")
  620. # print(b)
  621. # print(b)
  622. d = list(itertools.chain(*b))
  623. print(d)
  624. a.close_conn()