这个工具类十分简单和简洁。

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,插入的数据,字典
'''
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,插入的数据,字典
@isdistinct,查询的数据是否不重复
'''
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,插入的数据,字典
'''
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,插入的数据,字典
'''
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)

数据库连接类

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()
中,我用的是连接池连接,这里可以改成普通的数据库连接

查询结果解析方法

def fSqlResult(r,key_list):
#r @tuple 数据库fetchall的结果
#key_list @list 查询字段的keys
# format SQL Result 格式化数据库查询的结果,转化成包含多个字典的列表格式,即((1,2),(3,4))->[{"key1":1,"key2":2},{"key1":3,"key2":4}]
#返回 @dict 查询结果
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

使用方法:

例如要执行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'}]
方便快捷,适用于经常需要用到数据库的CRUD连接的应用。

自己写的Python数据库连接类和sql语句拼接方法的更多相关文章

  1. 向已写好的多行插入sql语句中添加字段和值

    #region 添加支款方式--向已写好的多行插入sql语句中添加字段和值 public int A_ZhifuFS(int diqu) { ; string strData = @"SEL ...

  2. Java代码实体类生成SQL语句(Java实体类转数据库)

    有的时候把数据库删了,如果照着实体类重新创建数据库的话比较麻烦,可以使用这个工具,把代码复制到项目里面设置一下即可把Java代码中的实体类转换为SQL语句输出为一个文件,打开执行命令即可. 下载:ht ...

  3. ASPNETCOREAPI 跨域处理 SQL 语句拼接 多条件分页查询 ASPNET CORE 核心 通过依赖注入(注入服务)

    ASPNETCOREAPI 跨域处理 AspNetCoreApi 跨域处理 如果咱们有处理过MV5 跨域问题这个问题也不大. (1)为什么会出现跨域问题:  浏览器安全限制了前端脚本跨站点的访问资源, ...

  4. sql语句判断方法之一

    sql语句判断方法之一CASE语句用法总结 背景: Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN ' ...

  5. SQL语句优化方法

    1.1 注释使用 在语句中多写注释,注释不影响SQL语句的执行效率.增加代码的可读性. 1.2 对于事务的使用 尽量使事务处理达到最短,如果事务太长最好按功能将事务分开执行(如:可以让用户在界面上多几 ...

  6. thinkPHP框架中执行原生SQL语句的方法

    这篇文章主要介绍了thinkPHP框架中执行原生SQL语句的方法,结合实例形式分析了thinkPHP中执行原生SQL语句的相关操作技巧,并简单分析了query与execute方法的使用区别,需要的朋友 ...

  7. EFCore执行Sql语句的方法:FromSql与ExecuteSqlCommand

    前言 在EFCore中执行Sql语句的方法为:FromSql与ExecuteSqlCommand:在EF6中的为SqlQuery与ExecuteSqlCommand,而FromSql和SqlQuery ...

  8. 长sql 语句拼接

    长sql 语句拼接

  9. 查看 Laravel 的 SQL 语句的方法

    在使用 Laravel 的 Eloquent 进行数据查询的时候,很多小伙伴都想看到背后执行的 SQL 语句到底是什么样的,这小笔录就是解决这个小问题的: 在 Providers/AppService ...

随机推荐

  1. JavaScript/jQuery选择器简介

    DOM提供的选择器 选择器是帮助我们选择页面元素的工具,在网站制作中常常会涉及到某个元素的改变,通过选择器提取这些元素可以很轻易的实现(DOM术语把所说的“元素”称作是“节点”).JavaScript ...

  2. QSqlQueryModel的实例操作

    QSqlQueryModel类为SQL的结果集提供了一个只读的数据模型,下面我们先利用这个类进行一个最简单的操作. 我们新建Qt4 Gui Application工程,我这里工程名为queryMode ...

  3. C#_Ajax分页MVCPager

    UCJqOrderList @model PagedList<Order> <div id="dvOrders"> <table width=&quo ...

  4. JavaScript网站设计实践(六)编写live.html页面 改进表格显示

    一.编写live.html页面,1.JavaScript实现表格的隔行换色,并且当鼠标移过时当前行高亮显示:2.是输出表格中的abbr标签的内容 实现后的效果图是这样的: 1.实现思路 在输出表格的时 ...

  5. GPS(Global Positioning System)全球定位系统

    GPS构成: 1.空间部分 GPS的空间部分是由24 颗工作卫星组成,它位于距地表20 200km的上空,均匀分布在6 个轨道面上(每个轨道面4 颗) ,轨道倾角为55°.此外,还有4 颗有源备份卫星 ...

  6. Maven学习小结(一 初探)

    1.下载Maven,解压并设置到环境变量中 https://maven.apache.org/download.cgi 需要先设置“JAVA_HOME”,否则报错: 之后查看Maven版本成功: 1. ...

  7. java.lang.NoSuchFieldError: RAW_XML_FILE_HEADER,调用XWPFTemplate动态合并生成一个新的docx文档时报错

    在使用 org.apache.poi 对office文件  根据表单内容和已上次的附件 动态合并成一个新的文档时,本地调试完全ok 但是发布倒Linux环境上就老是报这个错误java.lang.NoS ...

  8. 解决linux联网问题的方法论

    解决linux联网问题的方法论 */--> 解决linux联网问题的方法论 Table of Contents 1. ip网络配置流程 1.1. 1.确认电脑能和路由器ping通 1.2. 2. ...

  9. 关于ER图和UML图之间的对比

    ER图与UML图 ER图:实体-联系图(Entity-Relation Diagram)用来建立数据模型,在数据库系统概论中属于概念设计阶段,ER图提供了表示实体(即数据对象).属性和联系的方法,用来 ...

  10. MySQL常用查询

    显示所有数据库 show datebases; 删除数据库 drop datebase dbName 创建数据库 create datebase [if not exists] dbName; //中 ...