| 329 | # DictMysql |
| 330 | #---------------------------------------------------------------------- |
| 331 | class DictMySQL (object): |
| 332 | |
| 333 | def __init__ (self, desc, init = False, timeout = 10, verbose = False): |
| 334 | self.__argv = {} |
| 335 | self.__uri = {} |
| 336 | if isinstance(desc, dict): |
| 337 | argv = desc |
| 338 | else: |
| 339 | argv = self.__url_parse(desc) |
| 340 | for k, v in argv.items(): |
| 341 | self.__argv[k] = v |
| 342 | if k not in ('engine', 'init', 'db', 'verbose'): |
| 343 | self.__uri[k] = v |
| 344 | self.__uri['connect_timeout'] = timeout |
| 345 | self.__conn = None |
| 346 | self.__verbose = verbose |
| 347 | self.__init = init |
| 348 | if 'db' not in argv: |
| 349 | raise KeyError('not find db name') |
| 350 | self.__open() |
| 351 | |
| 352 | def __open (self): |
| 353 | mysql_startup() |
| 354 | if MySQLdb is None: |
| 355 | raise ImportError('No module named MySQLdb') |
| 356 | fields = [ 'id', 'word', 'sw', 'phonetic', 'definition', |
| 357 | 'translation', 'pos', 'collins', 'oxford', 'tag', 'bnc', 'frq', |
| 358 | 'exchange', 'detail', 'audio' ] |
| 359 | self.__fields = tuple([(fields[i], i) for i in range(len(fields))]) |
| 360 | self.__names = { } |
| 361 | for k, v in self.__fields: |
| 362 | self.__names[k] = v |
| 363 | self.__enable = self.__fields[3:] |
| 364 | self.__db = self.__argv.get('db', 'stardict') |
| 365 | if not self.__init: |
| 366 | uri = {} |
| 367 | for k, v in self.__uri.items(): |
| 368 | uri[k] = v |
| 369 | uri['db'] = self.__db |
| 370 | self.__conn = MySQLdb.connect(**uri) |
| 371 | else: |
| 372 | self.__conn = MySQLdb.connect(**self.__uri) |
| 373 | return self.init() |
| 374 | return True |
| 375 | |
| 376 | # 输出日志 |
| 377 | def out (self, text): |
| 378 | if self.__verbose: |
| 379 | print(text) |
| 380 | return True |
| 381 | |
| 382 | # 初始化数据库与表格 |
| 383 | def init (self): |
| 384 | database = self.__argv.get('db', 'stardict') |
| 385 | self.out('create database: %s'%database) |
| 386 | self.__conn.query("SET sql_notes = 0;") |
| 387 | self.__conn.query('CREATE DATABASE IF NOT EXISTS %s;'%database) |
| 388 | self.__conn.query('USE %s;'%database) |