12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- # -*- coding: utf-8 -*-
- import re
- db_config = '''
- localhost test_status:experiment1 ID,usec,sensor1
- #localhost test_status:experiment2 ID,usec,sensor1
- '''
- default_user = 'status'
- default_pass = 'status'
- datatype = dict(
- id='id',
- bit='boolean',
- tinyint='boolean',
- bigint='bigint',
- double='double',
- float='double',
- varchar='string'
- )
- if not db_config.strip():
- db_config = ''
- def auto_create_db(configs):
- extracted_dbs = []
- for hostname, table, fields in \
- [ x.strip().split()
- for x in configs.strip().split('\n')
- if not x.strip().startswith('#') ]:
- db_name, table_name = table.split(':')
- fields = fields.split(',')
- print hostname, db_name, table_name, fields
- db_settings = {'user': default_user,
- 'pass': default_pass,
- 'host': hostname,
- 'database': db_name,
- 'table': table_name,
- 'fields': fields}
- # DAL initialize
- db = DAL("mysql://%(user)s:%(pass)s@%(host)s/%(database)s" % db_settings, migrate=False)
- # extract fields
- matched_fields = []
- for fld_name in fields:
- fld = db.executesql( "SHOW COLUMNS FROM `%s` LIKE '%s'"
- % (table_name, fld_name), as_dict=True )
- if not fld:
- print "No matched field, should throw error and exit"
- else:
- f = fld[0]['Field']
- k = fld[0]['Key']
- m = re.match('(.*)\((.*)\)', fld[0]['Type'])
- if m:
- t = m.group(1)
- n = int(m.group(2))
- else:
- t = fld[0]['Type']
- n = None
- if k == 'PRI':
- t = 'id'
- ff = Field(f, type=datatype[t], length=n)
- #print ff.as_dict()
- matched_fields.append(ff)
- db.define_table(table_name, *matched_fields)
- #print db.as_json()
- extracted_dbs.append(db)
- return extracted_dbs
- sql_dbs = auto_create_db(db_config)
- if __name__ == '__main__':
- try:
- import gluon.main
- from gluon import DAL, Field
- except ImportError:
- import sys
- import os
- import re
- m = re.search('.*/(?=applications)', os.path.dirname(os.path.realpath(__file__)))
- os.chdir(m.group(0))
- sys.path.append(m.group(0))
- import gluon.main
- from gluon import DAL, Field
- auto_create_db(db_config)
|