自己写的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,插入的数据,字典
    '''
    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语句拼接方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇UE4 VR 模式下全屏解决办法点击a标签下载当前链接的图片&&js 通过 blob 类文件对象下载图片,修改图片保存的名字(兼容式写法)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Ajax实现DropDownList与ListBox联动效果

效果图: 目标:选择DropDownList,左侧ListBox从服务器端获取对应项。点击Button,对左、右侧ListBox进行操作。              最后在服务器端获取右侧ListBox的值 过程:          1、首先是给DropDownList弄个数据源,实际开发中一般都是从数据库去。我这演示方便就随便new 了个DataTabl...

Mysql:windows上mysql服务管理

自5.1.21及以后的变化: The following table shows the available servers for Windows in MySQL 5.1.20 and earlier. Binary Description mysqld-nt Optimized binary with named-pipe sup...

04-表格 table(会使用)

第01阶段.前端基础.表格 HTML 第二天目标 能够利用表格、列表和表单完成注册页面的综合案例 能出说表格用来做什么的 能说出列表用来做什么的 能说出表单用来做什么的 为了让我们页面显示的更加整齐,我们需要学习三个表(表格、表单、列表) 表格 table(会使用) 目标: 理解: 能说出表格用来做什么的 表格的基本结构组成 应用: 能够熟练...

element+vue显示数据库数据

App.vue <template><div class="app"><div id="heard"><h1>部门统计</h1></div><div id="Statistics"><div id="heard3"><h4>统计项</h4>...

反射+枚举+freemarker,自动生成实体类,自动建表建索引(二)之建表建索引,注解和DatabaseMetaData 获取信息

接上一篇博文 反射+枚举+freemarker,自动生成实体类,自动建表建索引(一)之生成实体类,枚举详解,这篇博文介绍自动建表。 用反射+枚举+freemarker,自己实现的自动生成实体类和自动建立数据表建索引。用enum枚举作为数据表的配置文件,1个枚举就是1张表,根据枚举类,自动生成实体类,和自动建表建索引。 主要步骤和 上一篇博文差不多,就是...

MYSQL常用命令集合(转载)

文章出处:http://www.cnblogs.com/q1ng/p/4474501.html 1.导出整个数据库mysqldump -u 用户名 -p --default-character-set=latin1 数据库名 > 导出的文件名(数据库默认编码是latin1)mysqldump -u wcnc -p smgp_apps_wcnc >...