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

Popular posts from this blog

linux - xterm copying to CLIPBOARD using copy-selection causes automatic updating of CLIPBOARD upon mouse selection -

c++ - qgraphicsview horizontal scrolling always has a vertical delta -