OSDN Git Service

epg-longexp fuction added.
[rec10/rec10-git.git] / rec10 / trunk / src / dbMySQL.py
1 #!/usr/bin/python
2 # coding: UTF-8
3 # Rec10 TS Recording Tools
4 # Copyright (C) 2009 Yukikaze
5 import MySQLdb
6 from decimal import Decimal
7 class DB_MySQL:
8     dbname = ""
9     dbhost = ""
10     dbusr = ""
11     dbpasswd = ""
12     dbport = 0
13     def __init__(self, dbname, user, passwd, host="localhost", port=3306):
14         self.dbname = dbname
15         self.dbhost = host
16         self.dbusr = user
17         self.dbpasswd = passwd
18         self.dbport = port
19         try:
20             con = MySQLdb.connect(user=user, passwd=passwd)
21             cur = con.cursor()
22             cur.execute('CREATE DATABASE ' + dbname + " DEFAULT CHARACTER SET utf8")
23             cur.close()
24             con.close()
25         except:
26             ""
27         db = self.connect_db()
28         try:
29             db[1].execute('\
30             CREATE TABLE rectime \
31             (\
32             id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,\
33             type VARCHAR(20),\
34             chtxt VARCHAR(20),\
35             title VARCHAR(100),\
36             btime DATETIME,\
37             etime DATETIME,\
38             deltatime VARCHAR(5),\
39             deltaday VARCHAR(5),\
40             opt VARCHAR(20),\
41             UNIQUE uni (type,chtxt,title,btime,deltaday)\
42             )')
43         except:
44             ""
45         self.close_db(db)
46         self.new_tv("")
47         self.new_ch("")
48         self.new_reclog()
49         self.new_bayeskey()
50         self.new_recjbk()
51     def connect_db(self):
52         """
53         dbへの接続
54         """
55         con = MySQLdb.connect(db=self.dbname, host=self.dbhost, port=self.dbport, user=self.dbusr, passwd=self.dbpasswd, charset="utf8")
56         cur = con.cursor()
57         cur.execute('set names utf8;')
58         return [con, cur]
59     def close_db(self, db):
60         db[1].close()
61         db[0].close()
62     def new_chdata(self):
63         db = self.connect_db()
64         try:
65             db[1].execute('drop table chdata')
66         except:
67             ""
68         try:
69             db[1].execute('\
70             CREATE TABLE chdata \
71             (\
72             bctype VARCHAR(15),\
73             ontv VARCHAR(30) PRIMARY KEY,\
74             chtxt VARCHAR(15),\
75             ch VARCHAR(20),\
76             csch VARCHAR(20),\
77             updatetime DATETIME,\
78             status TINYINT\
79             )')
80         except:
81             ""
82         self.close_db(db)
83     def add_chdata(self, bctype, ontv, chtxt, ch, csch, updatetime):
84         db = self.connect_db()
85         db[1].execute('\
86         INSERT INTO chdata \
87         VALUES (%s,%s,%s,%s,%s,%s,%s)', \
88                       (bctype, ontv, chtxt, ch, csch, updatetime, "1"))
89         self.close_db(db)
90     def select_by_ontv_chdata(self, ontv):
91         db = self.connect_db()
92         dbexe = db[1].execute("\
93         SELECT bctype,ontv,chtxt,ch,csch,updatetime \
94         FROM chdata \
95         WHERE ontv = %s", \
96                               (ontv,))
97         ret = []
98         dls = []
99         if dbexe > 0:
100             dls = db[1].fetchall()
101         self.close_db(db)
102         for dl in dls:
103             r = list(dl)
104             r[5] = r[5].strftime("%Y-%m-%d %H:%M:%S")
105             ret.append(r)
106         return ret
107     def select_by_chtxt_chdata(self, chtxt):
108         db = self.connect_db()
109         dbexe = db[1].execute("\
110         SELECT bctype,ontv,chtxt,ch,csch,updatetime \
111         FROM chdata \
112         WHERE chtxt = %s", \
113                               (chtxt,))
114         ret = []
115         dls = []
116         if dbexe > 0:
117             dls = db[1].fetchall()
118         self.close_db(db)
119         for dl in dls:
120             r = list(dl)
121             r[5] = r[5].strftime("%Y-%m-%d %H:%M:%S")
122             ret.append(r)
123         return ret
124     def select_by_bctype_chdata(self, bctype):
125         db = self.connect_db()
126         dbexe = db[1].execute("\
127         SELECT bctype,ontv,chtxt,ch,csch,updatetime,status \
128         FROM chdata \
129         WHERE bctype = %s", \
130                               (bctype,))
131         ret = []
132         dls = []
133         if dbexe > 0:
134             dls = db[1].fetchall()
135         self.close_db(db)
136         for dl in dls:
137             #print dl
138             r = list(dl)
139             r[5] = r[5].strftime("%Y-%m-%d %H:%M:%S")
140             r[6] = str(r[6])
141             ret.append(r)
142         return ret
143     def select_by_ch_chdata(self, ch):
144         db = self.connect_db()
145         dbexe = db[1].execute("\
146         SELECT \
147         bctype,ontv,chtxt,ch,csch,updatetime \
148         FROM chdata \
149         WHERE ch = %s", \
150                               (ch,))
151         ret = []
152         dls = []
153         if dbexe > 0:
154             dls = db[1].fetchall()
155         self.close_db(db)
156         for dl in dls:
157             r = list(dl)
158             r[5] = r[5].strftime("%Y-%m-%d %H:%M:%S")
159             ret.append(r)
160         return ret
161     def select_all_chdata(self):
162         db = self.connect_db()
163         dbexe = db[1].execute("\
164         SELECT bctype,ontv,chtxt,ch,csch,updatetime \
165         FROM chdata \
166         ")
167         ret = []
168         dls = []
169         if dbexe > 0:
170             dls = db[1].fetchall()
171         self.close_db(db)
172         for dl in dls:
173             r = list(dl)
174             r[5] = r[5].strftime("%Y-%m-%d %H:%M:%S")
175             ret.append(r)
176         return ret
177     def select_get_update_chdata(self, dhour):
178         db = self.connect_db()
179         dbexe = db[1].execute("SELECT bctype,chtxt,status FROM chdata \
180         WHERE \
181         ( \
182         updatetime < DATE_SUB(now(),INTERVAL " + dhour + " HOUR) \
183         AND \
184         status = 1 \
185         ) \
186         OR \
187         status > 1 \
188         ORDER BY status DESC")
189         ret = []
190         #print dbexe
191         if dbexe > 0:
192             ret = db[1].fetchall()
193         self.close_db(db)
194         return ret
195     def update_by_bctype_chdata(self, bctype):
196         db = self.connect_db()
197         db[1].execute("\
198         UPDATE chdata \
199         SET \
200         updatetime=now() , \
201         status = 1 \
202         WHERE bctype = %s", (bctype,))
203         self.close_db(db)
204     def update_by_bctype_and_chtxt_chdata(self, bctype, chtxt):
205         db = self.connect_db()
206         db[1].execute("\
207         UPDATE chdata \
208         SET \
209         updatetime=now() , \
210         status = 1\
211         WHERE bctype = %s AND chtxt = %s", (bctype, chtxt))
212         self.close_db(db)
213     def update_status_by_bctype_chdata(self, bctype, status):
214         db = self.connect_db()
215         db[1].execute("\
216         UPDATE chdata \
217         SET \
218         status=%s \
219         WHERE bctype = %s", \
220                       (status, bctype)\
221                       )
222         self.close_db(db)
223     def add_reclog(self , chtxt="", title="", btime="", etime="", opt="", exp="", longexp="", category=""):
224         db = self.connect_db()
225         db[1].execute('\
226         INSERT IGNORE into reclog \
227         (chtxt,title,btime,etime,opt,exp,longexp,category) \
228         values (%s,%s,%s,%s,%s,%s,%s,%s)', \
229                       ( chtxt, title, btime, etime, opt,exp,longexp,category))
230         ##db.commit()
231         self.close_db(db)
232     def del_reclog(self, title="", chtxt="", btime=""):
233         """
234
235         """
236         db = self.connect_db()
237         db[1].execute("\
238         DELETE FROM reclog \
239         WHERE title = %s AND chtxt = %s AND btime = %s", \
240                       (title, chtxt, btime))
241         #db.commit()
242         self.close_db(db)
243     def new_reclog(self):
244         db = self.connect_db()
245         try:
246             db[1].execute('\
247             CREATE TABLE reclog \
248             (\
249             id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,\
250             chtxt VARCHAR(20),\
251             title VARCHAR(100),\
252             btime DATETIME,\
253             etime DATETIME,\
254             opt VARCHAR(20),\
255             exp VARCHAR(200),\
256             longexp TEXT,\
257             category VARCHAR(100),\
258             UNIQUE uni (chtxt,title,btime,category)\
259             )')
260         except:
261             ""
262         self.close_db(db)
263     def add_rectime(self, type="", chtxt="", title="", btime="", etime="", deltatime="", deltaday="", opt=""):
264         db = self.connect_db()
265         db[1].execute('\
266         INSERT IGNORE into rectime \
267         (type,chtxt,title,btime,etime,deltatime,deltaday,opt) \
268         values (%s,%s,%s,%s,%s,%s,%s,%s)', \
269                       (type, chtxt, title, btime, etime, deltatime, deltaday, opt))
270         ##db.commit()
271         self.close_db(db)
272     def del_rectime(self, type="", title="", chtxt="", btime=""):
273         """
274
275         """
276         db = self.connect_db()
277         db[1].execute("\
278         DELETE FROM rectime \
279         WHERE type = %s AND title = %s AND chtxt = %s AND btime = %s", \
280                       (type, title, chtxt, btime))
281         #db.commit()
282         self.close_db(db)
283     def select_all_rectime(self):
284         db = self.connect_db()
285         recdata = []
286         dbr = db[1].execute("\
287         SELECT type, chtxt, title, btime, etime, deltatime ,deltaday ,opt \
288         FROM rectime")
289         dbl = db[1].fetchall()
290         self.close_db(db)
291         if dbr > 0:
292             for typet, chtxt, title, btime, etime, deltatime, deltaday, opt in dbl:
293                 ret = {}
294                 ret['type'] = typet
295                 ret['chtxt'] = chtxt
296                 ret['title'] = title.encode('utf-8')
297                 btime = btime.strftime("%Y-%m-%d %H:%M:%S")
298                 etime = etime.strftime("%Y-%m-%d %H:%M:%S")
299                 ret['btime'] = btime
300                 ret['etime'] = etime
301                 ret['opt'] = opt
302                 ret['deltatime'] = ""
303                 ret['deltaday'] = ""
304                 if deltatime == None:
305                     deltatime = "3"
306                 if deltaday == None:
307                     deltaday = "7"
308                 if typet == 'key':
309                     ret['deltatime'] = deltatime
310                 elif typet == 'keyevery':
311                     ret['deltatime'] = deltatime
312                     ret['deltaday'] = deltaday
313                 recdata.append(ret)
314         self.close_db(db)
315         return recdata
316     def select_bytime_rectime(self, dminutes):
317         db = self.connect_db()
318         recdatum = []
319         #dbr=db[1].execute("SELECT type, chtxt, title, btime, etime, deltatime ,deltaday ,opt FROM rectime WHERE btime < DATE_SUB(now(),INTERVAL "+dminutes+" MINUTE ) AND btime > DATE_ADD(now(),INTERVAL "+dminutes+" MINUTE )")
320         dbr = db[1].execute("SELECT \
321         type, chtxt, title, btime, etime, deltatime ,deltaday ,opt \
322         FROM rectime \
323         WHERE btime BETWEEN DATE_SUB(now(),INTERVAL " + dminutes + " MINUTE ) AND \
324         DATE_ADD(now(),INTERVAL " + dminutes + " MINUTE )")
325         dbl = db[1].fetchall()
326         self.close_db(db)
327         #print dbl
328         if dbr > 0:
329             for typet, chtxt, title, btime, etime, deltatime, deltaday, opt in dbl:
330                 ret = {}
331                 ret['type'] = typet
332                 ret['chtxt'] = chtxt
333                 ret['title'] = title.encode('utf-8')
334                 btime = btime.strftime("%Y-%m-%d %H:%M:%S")
335                 etime = etime.strftime("%Y-%m-%d %H:%M:%S")
336                 ret['btime'] = btime
337                 ret['etime'] = etime
338                 ret['opt'] = opt
339                 if deltatime == None or deltatime == "":
340                     deltatime = "3"
341                 if deltaday == None or deltaday == "":
342                     deltaday = "7"
343                 if typet == 'key':
344                     ret['deltatime'] = deltatime
345                 elif typet == 'keyevery':
346                     ret['deltatime'] = deltatime
347                     ret['deltaday'] = deltaday
348                 recdatum.append(ret)
349         return recdatum
350     def delete_old_rectime(self, dhour):
351         db = self.connect_db()
352         db[1].execute("\
353         DELETE FROM rectime \
354         WHERE \
355         btime < DATE_SUB(now(),INTERVAL " + dhour + " HOUR )")
356         #db.commit()
357         self.close_db(db)
358     def new_recjbk(self):
359         db = self.connect_db()
360         try:
361             db[1].execute("\
362             CREATE TABLE recjbk \
363             (\
364             id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,\
365             keyword VARCHAR(200),\
366             UNIQUE unijbk (keyword)\
367             )")
368         except:
369             ""
370         self.close_db(db)
371     def add_recjbk(self,key):
372         db = self.connect_db()
373         db[1].execute('\
374         INSERT IGNORE into recjbk \
375         (keyword) \
376         values (%s)', \
377                       (key,))
378         ##db.commit()
379         self.close_db(db)
380     def select_all_recjbk(self):
381         db = self.connect_db()
382         dbexe = db[1].execute("\
383         SELECT keyword \
384         FROM recjbk \
385         ")
386         ret = []
387         if dbexe > 0:
388             ret = db[1].fetchall()
389         self.close_db(db)
390         return ret
391     def new_status(self):
392         db = self.connect_db()
393         try:
394             db[1].execute("\
395             CREATE TABLE status \
396             (\
397             ts2avi TINYINT DEFAULT 0,\
398             terec TINYINT DEFAULT 0,\
399             bscsrec TINYINT DEFAULT 0,\
400             b252ts TINYINT DEFAULT 0\
401             )")
402             db[1].execute("INSERT IGNORE into status VALUE (0,0,0,0)")
403         except:
404             ""
405
406         self.close_db(db)
407     def select_all_status(self):
408         db = self.connect_db()
409         dbexe = db[1].execute("\
410         SELECT ts2avi,terec,bscsrec,b252ts \
411         FROM status \
412         ")
413         ret = []
414         dls = []
415         if dbexe > 0:
416             dls = db[1].fetchall()
417         self.close_db(db)
418         for dl in dls:
419             r = list(dl)
420             r[0]=str(r[0])
421             r[1]=str(r[1])
422             r[2]=str(r[2])
423             r[3]=str(r[3])
424             ret.append(r)
425         return ret
426         self.close_db(db)
427     def change_ts2avi_status(self,i):
428         """
429         statuをiだけ増減する
430         iはint
431         """
432         db = self.connect_db()
433         db[1].execute("\
434         UPDATE status SET ts2avi=ts2avi+%s",i)
435         self.close_db(db)
436     def change_terec_status(self,i):
437         """
438         statuをiだけ増減する
439         iはint
440         """
441         db = self.connect_db()
442         db[1].execute("\
443         UPDATE status SET terec=terec+%s",i)
444         self.close_db(db)
445     def change_bscsrec_status(self,i):
446         """
447         statuをiだけ増減する
448         iはint
449         """
450         db = self.connect_db()
451         db[1].execute("\
452         UPDATE status SET bscsrec=bscsrec+%s",i)
453         self.close_db(db)
454     def change_b252ts_status(self,i):
455         """
456         statuをiだけ増減する
457         iはint
458         """
459         db = self.connect_db()
460         db[1].execute("\
461         UPDATE status SET b252ts=b252ts+%s",i)
462         self.close_db(db)
463     def new_tv(self, bctype):
464         db = self.connect_db()
465         try:
466             db[1].execute("\
467             DELETE FROM tv \
468             WHERE bctype = %s", \
469                           (bctype,))
470         except:
471             ""
472         try:
473             db[1].execute("\
474             CREATE TABLE tv \
475             (\
476             bctype VARCHAR(20),\
477             channel VARCHAR(100) NOT NULL,\
478             start VARCHAR(30),\
479             stop  VARCHAR(30),\
480             title VARCHAR(100),\
481             exp VARCHAR(200),\
482             longexp TEXT,\
483             category VARCHAR(100),\
484             UNIQUE unitv(bctype,channel,start,stop,title)\
485             )")
486         except:
487             ""
488         #db.commit()
489         self.close_db(db)
490     def add_tv(self, bctype, channel, start, stop, title, desc,longdesc, category):
491         db = self.connect_db()
492         db[1].execute('\
493         INSERT IGNORE INTO tv \
494         VALUES (%s,%s,%s,%s,%s,%s,%s,%s)', \
495                       (bctype, channel, start, stop, title, desc,longdesc,category))
496         #db.commit()
497         self.close_db(db)
498     def add_multi_tv(self, tvlists):
499         """
500         tvlists is (bctype,channel,start,stop,title,desc,longdesc,category) lists.
501         """
502         db = self.connect_db()
503         db[1].executemany('\
504         INSERT IGNORE INTO tv \
505         (bctype,channel,start,stop,title,exp,longexp,category) \
506         values(%s,%s,%s,%s,%s,%s,%s,%s)', \
507                           tvlists)
508         #db.commit()
509         self.close_db(db)
510     def select_by_time_ngram_tv(self, btime, etime, chtxt):
511         db = self.connect_db()
512         dbexe = "\
513         SELECT \
514         chdata.chtxt,title,start,stop,exp,longexp,category \
515         FROM tv \
516         INNER JOIN chdata \
517         WHERE chdata.ontv=tv.channel \
518         AND \
519         start >= %s \
520         AND \
521         start <= %s \
522         AND \
523         chdata.chtxt=%s"
524         dbcmd = db[1].execute(dbexe, (btime, etime, chtxt))
525         retall = []
526         if dbcmd > 0:
527             retall = db[1].fetchall()
528         self.close_db(db)
529         return retall
530     def select_by_time_auto_suggest_tv(self,keyword,btime,etime):
531         db = self.connect_db()
532         dbexe = "\
533         SELECT \
534         chdata.chtxt,title,start,stop,exp,longexp,category \
535         FROM tv \
536         INNER JOIN chdata \
537         WHERE chdata.ontv=tv.channel \
538         AND \
539         start >= %s \
540         AND \
541         start <= %s \
542         AND \
543         ( \
544         ( title LIKE \'%%"+keyword+"%%\' ) \
545         OR \
546         ( exp LIKE \'%%"+keyword+"%%\' ) \
547         OR \
548         ( longexp LIKE \'%%"+keyword+"%%\' ) \
549         )"
550         dbcmd = db[1].execute(dbexe,(btime, etime))
551         retall = []
552         if dbcmd > 0:
553             retall = db[1].fetchall()
554         self.close_db(db)
555         return retall
556     def new_ch(self, bctype):
557         db = self.connect_db()
558         try:
559             db[1].execute("DELETE FROM ch WHERE bctype = %s", (bctype,))
560         except:
561             ""
562         try:
563             db[1].execute('\
564             CREATE TABLE ch \
565             (\
566             bctype VARCHAR(20),\
567             channel VARCHAR(20) NOT NULL,\
568             display VARCHAR(100),\
569             UNIQUE unich(bctype,channel)\
570             )')
571         except:
572             ""
573         #db.commit()
574         self.close_db(db)
575     def add_ch(self, bctype, channel, display):
576         db = self.connect_db()
577         db[1].execute('INSERT IGNORE INTO ch VALUES (%s,%s,%s)', (bctype, channel, display))
578         #db.commit()
579         self.close_db(db)
580     def add_multi_ch(self, chlists):
581         """
582         chlists is (bctype,channel,display) lists
583         """
584         db = self.connect_db()
585         db[1].executemany('INSERT IGNORE INTO ch VALUES (%s,%s,%s)', chlists)
586         self.close_db(db)
587     def new_bayeskey(self):
588         db = self.connect_db()
589         try:
590             db[1].execute('CREATE TABLE bayeskey \
591             (\
592             keychar VARCHAR(10),\
593             chtxt VARCHAR(20),\
594             ratio_rec DECIMAL(32,14),\
595             ratio_all DECIMAL(32,14),\
596             UNIQUE unibayeskey(keychar,chtxt)\
597             )')
598             db[1].execute('CREATE INDEX keycharindex ON bayeskey(keychar)')
599         except:
600             ""
601         self.close_db(db)
602
603     def add_bayeskey(self,key,chtxt,ratio_rec,ratio_all):
604         db = self.connect_db()
605         ratio_rec=str(ratio_rec)
606         ratio_all=str(ratio_all)
607         db[1].execute('\
608         INSERT IGNORE INTO bayeskey \
609         (keychar,chtxt,ratio_rec,ratio_all) \
610         values (%s,%s,%s,%s)',\
611         (key,chtxt,ratio_rec,ratio_all))
612         self.close_db(db)
613     def add_num_bayeskey(self,chtxt,add_rec_num,add_all_num):
614         db = self.connect_db()
615         add_rec_num=str(add_rec_num)
616         add_all_num=str(add_all_num)
617         db[1].execute("\
618         UPDATE bayeskey SET ratio_rec=ratio_rec+%s,ratio_all=ratio_all+%s WHERE keychar=\"NUM\" AND chtxt=%s",\
619         (add_rec_num,add_all_num,chtxt))
620         self.close_db(db)
621     def change_bayeskey(self,key,chtxt,new_ratio_rec,new_ratio_all):
622         """
623         """
624         db = self.connect_db()
625         db[1].execute("\
626         UPDATE bayeskey SET ratio_rec=%s,ratio_all=%s WHERE keychar=%s AND chtxt=%s",(str(new_ratio_rec),str(new_ratio_all),key,chtxt)\
627         )
628         self.close_db(db)
629     def change_ratio_all_reduce_bayeskey(self,chtxt,beforenum,newnum):
630         beforenum=str(beforenum)
631         newnum=str(newnum)
632         db = self.connect_db()
633         db[1].execute("\
634         UPDATE bayeskey SET ratio_all=ratio_all*%s/(%s+%s) WHERE chtxt=%s AND NOT (keychar=\"NUM\")",(beforenum,newnum,beforenum,chtxt)\
635         )
636         self.close_db(db)
637     def change_ratio_all_bayeskey(self,key,chtxt,beforenum,addnum):
638         db = self.connect_db()
639         beforenumf=beforenum
640         beforenum=str(beforenum)
641         db[1].execute("INSERT INTO bayeskey (keychar,chtxt,ratio_rec,ratio_all) \
642         VALUES (%s,%s,%s,%s)\
643         ON DUPLICATE KEY UPDATE \
644         ratio_all=(ratio_all*%s+%s)/%s",(key,chtxt,"0",str(Decimal(addnum)/beforenumf),beforenum,chtxt,key))
645         self.close_db(db)
646     def change_multi_ratio_all_bayeskey(self,chtxt,beforenum,list):
647         """
648         list={key:addnum}のリスト
649         """
650         beforenumf=beforenum
651         beforenum=str(beforenum)
652         db = self.connect_db()
653         for i,j in list.items():
654             retl=(i,chtxt,"0",str(Decimal(j)/beforenumf),beforenum,str(j),beforenum)
655             db[1].execute("INSERT INTO bayeskey (keychar,chtxt,ratio_rec,ratio_all) \
656             VALUES (%s,%s,%s,%s)\
657             ON DUPLICATE KEY UPDATE \
658             ratio_all=(ratio_all*%s+%s)/%s",retl)
659         self.close_db(db)
660     def change_ratio_rec_reduce_bayeskey(self,chtxt,beforenum,newnum):
661         beforenum=str(beforenum)
662         newnum=str(newnum)
663         db = self.connect_db()
664         db[1].execute("\
665         UPDATE bayeskey SET ratio_rec=ratio_rec*%s/(%s+%s) WHERE chtxt=%s AND NOT (keychar=\"NUM\")",(beforenum,newnum,beforenum,chtxt)\
666         )
667         self.close_db(db)
668     def change_ratio_rec_bayeskey(self,key,chtxt,beforenum,addnum):
669         db = self.connect_db()
670         beforenumf=beforenum
671         beforenum=str(beforenum)
672         db[1].execute("INSERT INTO bayeskey (keychar,chtxt,ratio_rec,ratio_all) \
673         VALUES (%s,%s,%s,%s)\
674         ON DUPLICATE KEY UPDATE \
675         ratio_rec=(ratio_rec*%s+%s)/%s",(key,chtxt,str(Decimal(addnum)/beforenumf),"0",beforenum,chtxt,key))
676         self.close_db(db)
677     def change_multi_ratio_rec_bayeskey(self,chtxt,beforenum,list):#self,key,chtxt,beforenum,addnum):
678         beforenumf=beforenum
679         beforenum=str(beforenum)
680         db = self.connect_db()
681         for i,j in list.items():
682             retl=(i,chtxt,str(Decimal(j)/beforenumf),"0",beforenum,str(j),beforenum)
683             db[1].execute("INSERT INTO bayeskey (keychar,chtxt,ratio_rec,ratio_all) \
684             VALUES (%s,%s,%s,%s)\
685             ON DUPLICATE KEY UPDATE \
686             ratio_rec=(ratio_rec*%s+%s)/%s",retl)
687         self.close_db(db)
688     def select_by_key_bayeskey(self,key,chtxt):
689         db = self.connect_db()
690         dbexe = db[1].execute("\
691         SELECT keychar,chtxt,ratio_rec,ratio_all \
692         FROM bayeskey \
693         WHERE keychar = %s AND chtxt = %s", \
694                               (key,chtxt))
695         dls = []
696         if dbexe > 0:
697             dls = db[1].fetchall()
698         self.close_db(db)
699         if len(dls)>0:
700             return dls[0]
701         else:
702             return dls