python - SQL inside code or procedure? -
this straight forward question regarding how insert or select data from/to database ? since i'm trying keep code clean possible, how i'm performing queries , inserts/updates:
import sys import mysqldb configparser import safeconfigparser #------------------------------------------------------------ # select , insert # func should called like: # db_call('c:\dbconf.cfg','select * something') # or insert / update statement. #------------------------------------------------------------ def db_call(cfgfile, sql): parser = safeconfigparser() parser.read(cfgfile) dbtype = parser.get('database', 'db_type') db_host = parser.get('database', 'db_host') db_name = parser.get('database', 'db_name') db_user = parser.get('database', 'db_login') db_pass = parser.get('database', 'db_pass') con = mysqldb.connect(host=db_host, db=db_name, user=db_user, passwd=db_pass ) cur = con.cursor() try: try: cur.execute(sql) if re.match(r'insert|insert|update|update|delete|delete', sql): con.commit() else: data = cur.fetchall() resultlist = [] data_out in data: resultlist.append(data_out) return resultlist except mysqldb.error, e: con.rollback() print "error " print e.args sys.exit(1) else: con.commit() finally: con.close()
but, using method have keep queries inside main class, can problem if change happens table structure,
but, going sp call, can have code more clean, passing sp name , fields. lead me have 1 python function more specific cases, ( example, sp receives 2,3 or 4 inputs must have diferent python functions each )
import sys import mysqldb configparser import safeconfigparser #------------------------------------------------------------ # select only!!!!!! # func should called like: # db_call('fn_your_function','field_a','field_b') # or insert / update statement. #------------------------------------------------------------ def db_call(self, cfgfile, query): parser = safeconfigparser() parser.read(cfgfile) dbtype = parser.get('database', 'db_type') db_host = parser.get('database', 'db_host') db_name = parser.get('database', 'db_name') db_user = parser.get('database', 'db_login') db_pass = parser.get('database', 'db_pass') con = mysqldb.connect(host=db_host, db=db_name, user=db_user, passwd=db_pass ) cur = con.cursor() try: cur.callproc(query[0], (query[1],query[2])) data = cur.fetchall() resultlist = [] data_out in data: resultlist.append(data_out) return resultlist con.close() except mysqldb.error, e: con.rollback() print "error " print e.args sys.exit(1)
im not sure if here right place ask this, before voting close (if case ) please reply information ask kind of question :)
thanks in advance.
if goal abstract away schema of db objects' implementations, should looking @ orms/persistence frameworks. there number of them in python. examples, sqlalchemy popular , django, popular web framework, has 1 built in.
Comments
Post a Comment