Browse Source

Added sqlutils functions

Yann Weber 9 years ago
parent
commit
493149cfeb
1 changed files with 73 additions and 0 deletions
  1. 73
    0
      Database/sqlutils.py

+ 73
- 0
Database/sqlutils.py View File

@@ -0,0 +1,73 @@
1
+# -*- coding: utf-8 -*-
2
+import os
3
+import re
4
+import logging as logger
5
+
6
+import sqlalchemy as sqla
7
+from django.conf import settings
8
+
9
+
10
+os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Lodel.settings")
11
+
12
+ENGINES = {'mysql': {
13
+				'driver': 'pymysql',
14
+				'encoding': 'utf8'
15
+			},
16
+			'postgresql': {
17
+				'driver': 'psycopg2',
18
+				'encoding': 'utf8',
19
+			},
20
+			'sqlite': {
21
+				'driver': 'pysqlite',
22
+				'encoding': 'utf8',
23
+			},
24
+}
25
+
26
+sqlcfg = settings.LODEL2SQLWRAPPER
27
+
28
+def getEngine(ename = 'default', sqlalogging = None):
29
+	""" Return a sqlalchemy engine
30
+		@param read bool: If True return the read engine, else 
31
+		return the write one
32
+		@return a sqlachemy engine instance
33
+
34
+		@todo Put the check on db config in SqlWrapper.checkConf()
35
+	"""
36
+	#Loading confs
37
+	cfg = sqlcfg['db'][ename]
38
+
39
+	edata = ENGINES[cfg['ENGINE']] #engine infos
40
+	conn_str = ""
41
+
42
+	if cfg['ENGINE'] == 'sqlite':
43
+		#Sqlite connection string
44
+		conn_str = '%s+%s:///%s'%( cfg['ENGINE'],
45
+			edata['driver'],
46
+			cfg['NAME'])
47
+	else:
48
+		#Mysql and Postgres connection string
49
+		user = cfg['USER']
50
+		user += (':'+cfg['PASSWORD'] if 'PASSWORD' in cfg else '')
51
+		
52
+		if 'HOST' not in cfg:
53
+			logger.info('Not HOST in configuration, using localhost')
54
+			host = 'localhost'
55
+		else:
56
+			host = cfg['HOST']
57
+
58
+		host += (':'+cfg['PORT'] if 'PORT' in cfg else '')
59
+
60
+		conn_str = '%s+%s://'%(cfg['ENGINE'], edata['driver'])
61
+		conn_str += '%s@%s/%s'%(user,host,cfg['NAME'])
62
+
63
+
64
+	ret = sqla.create_engine(conn_str, encoding=edata['encoding'], echo=sqlalogging)
65
+
66
+	logger.debug("Getting engine :"+str(ret))
67
+
68
+	return ret
69
+
70
+def meta(engine):
71
+		res = sqla.MetaData()
72
+		res.reflect(bind=engine)
73
+		return res

Loading…
Cancel
Save