db_legacy.py.tmp 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. # -*- coding: utf-8 -*-
  2. import re
  3. db_config = '''
  4. localhost test_status:experiment1 ID,usec,sensor1
  5. #localhost test_status:experiment2 ID,usec,sensor1
  6. '''
  7. default_user = 'status'
  8. default_pass = 'status'
  9. datatype = dict(
  10. id='id',
  11. bit='boolean',
  12. tinyint='boolean',
  13. bigint='bigint',
  14. double='double',
  15. float='double',
  16. varchar='string'
  17. )
  18. if not db_config.strip():
  19. db_config = ''
  20. def auto_create_db(configs):
  21. extracted_dbs = []
  22. for hostname, table, fields in \
  23. [ x.strip().split()
  24. for x in configs.strip().split('\n')
  25. if not x.strip().startswith('#') ]:
  26. db_name, table_name = table.split(':')
  27. fields = fields.split(',')
  28. print hostname, db_name, table_name, fields
  29. db_settings = {'user': default_user,
  30. 'pass': default_pass,
  31. 'host': hostname,
  32. 'database': db_name,
  33. 'table': table_name,
  34. 'fields': fields}
  35. # DAL initialize
  36. db = DAL("mysql://%(user)s:%(pass)s@%(host)s/%(database)s" % db_settings, migrate=False)
  37. # extract fields
  38. matched_fields = []
  39. for fld_name in fields:
  40. fld = db.executesql( "SHOW COLUMNS FROM `%s` LIKE '%s'"
  41. % (table_name, fld_name), as_dict=True )
  42. if not fld:
  43. print "No matched field, should throw error and exit"
  44. else:
  45. f = fld[0]['Field']
  46. k = fld[0]['Key']
  47. m = re.match('(.*)\((.*)\)', fld[0]['Type'])
  48. if m:
  49. t = m.group(1)
  50. n = int(m.group(2))
  51. else:
  52. t = fld[0]['Type']
  53. n = None
  54. if k == 'PRI':
  55. t = 'id'
  56. ff = Field(f, type=datatype[t], length=n)
  57. #print ff.as_dict()
  58. matched_fields.append(ff)
  59. db.define_table(table_name, *matched_fields)
  60. #print db.as_json()
  61. extracted_dbs.append(db)
  62. return extracted_dbs
  63. sql_dbs = auto_create_db(db_config)
  64. if __name__ == '__main__':
  65. try:
  66. import gluon.main
  67. from gluon import DAL, Field
  68. except ImportError:
  69. import sys
  70. import os
  71. import re
  72. m = re.search('.*/(?=applications)', os.path.dirname(os.path.realpath(__file__)))
  73. os.chdir(m.group(0))
  74. sys.path.append(m.group(0))
  75. import gluon.main
  76. from gluon import DAL, Field
  77. auto_create_db(db_config)