python怎么和sql一起用_自己写的Python数据库连接类和sql语句拼接方法
這個工具類十分簡單和簡潔。
sql拼接方法
# encoding=utf-8
from django.http import HttpResponse
from anyjson import serialize
from django.http import HttpResponse
from anyjson import serialize
import MySQLdb
def safe(s):
return MySQLdb.escape_string(s)
def get_i_sql(table, dict):
'''
生成insert的sql語句
@table,插入記錄的表名
@dict,插入的數(shù)據(jù),字典
'''
sql = 'insert into %s set ' % table
sql += dict_2_str(dict)
return sql
def get_s_sql(table, keys, conditions, isdistinct=0):
'''
生成select的sql語句
@table,查詢記錄的表名
@key,需要查詢的字段
@conditions,插入的數(shù)據(jù),字典
@isdistinct,查詢的數(shù)據(jù)是否不重復(fù)
'''
if isdistinct:
sql = 'select distinct %s ' % ",".join(keys)
else:
sql = 'select %s ' % ",".join(keys)
sql += ' from %s ' % table
if conditions:
sql += ' where %s ' % dict_2_str_and(conditions)
return sql
def get_u_sql(table, value, conditions):
'''
生成update的sql語句
@table,查詢記錄的表名
@value,dict,需要更新的字段
@conditions,插入的數(shù)據(jù),字典
'''
sql = 'update %s set ' % table
sql += dict_2_str(value)
if conditions:
sql += ' where %s ' % dict_2_str_and(conditions)
return sql
def get_d_sql(table, conditions):
'''
生成detele的sql語句
@table,查詢記錄的表名
@conditions,插入的數(shù)據(jù),字典
'''
sql = 'delete from %s ' % table
if conditions:
sql += ' where %s ' % dict_2_str_and(conditions)
return sql
def dict_2_str(dictin):
'''
將字典變成,key='value',key='value' 的形式
'''
tmplist = []
for k, v in dictin.items():
tmp = "%s='%s'" % (str(k), safe(str(v)))
tmplist.append(' ' + tmp + ' ')
return ','.join(tmplist)
def dict_2_str_and(dictin):
'''
將字典變成,key='value' and key='value'的形式
'''
tmplist = []
for k, v in dictin.items():
tmp = "%s='%s'" % (str(k), safe(str(v)))
tmplist.append(' ' + tmp + ' ')
return ' and '.join(tmplist)
數(shù)據(jù)庫連接類
class SqlConn():
def __init__(self):
self.conn= DBpool.pool.connection()
self.cur=self.conn.cursor()
def cur(self):
return self.cur()
def commit(self):
self.conn.commit()
def execute(self,sql,fetchone=0):
self.cur.execute(sql)
return self.cur.fetchone() if fetchone else self.cur.fetchall()
def last_id(self,table):
sql='SELECT LAST_INSERT_ID() from %s'%table
return self.execute(sql,1)[0]
def close(self):
self.cur.close()
self.conn.close()
self.conn=?DBpool.pool.connection()
中,我用的是連接池連接,這里可以改成普通的數(shù)據(jù)庫連接
查詢結(jié)果解析方法
def fSqlResult(r,key_list):
#r @tuple 數(shù)據(jù)庫fetchall的結(jié)果
#key_list @list 查詢字段的keys
# format SQL Result 格式化數(shù)據(jù)庫查詢的結(jié)果,轉(zhuǎn)化成包含多個字典的列表格式,即((1,2),(3,4))->[{"key1":1,"key2":2},{"key1":3,"key2":4}]
#返回 @dict 查詢結(jié)果
mlist=[]
l=len(key_list)
if r:
for item in r:
tmp={}
for i in range(l):
tmp[key_list[i]]=str(item[i])
mlist.append(tmp)
return mlist
使用方法:
例如要執(zhí)行sql語句:select username,pwd,type,age,birth from user where username='abc';
conn=SqlConn()
key_list=['username','pwd','type','age','birth']
sql=s_sql('user',key_list,{'username':'abc'}
r=conn.execute(sql)
data=fSqlResult(r,key_list)
conn.close()
data的格式為[{'username':'i am username','pwd':'i am pwd','type':'student','age':12,'birth':'2014-7-2'}]
方便快捷,適用于經(jīng)常需要用到數(shù)據(jù)庫的CRUD連接的應(yīng)用。
總結(jié)
以上是生活随笔為你收集整理的python怎么和sql一起用_自己写的Python数据库连接类和sql语句拼接方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 破晓序列幻城探秘怎么玩
- 下一篇: 小产权房是什么(什么叫小产权房产)