python操作mysql数据库用MySQLdb模板,操作postgresql则用psycopg2模块

安装MySQLdb(用yum安装,好像只能与mysql5.1版本配合使用):yum install -y MySQL-python

安装完后,可用import MySQLdb来使用

下面先简介MySQLdb的各种方法

MySQLdb.connect():连接数据库,主要有以下参数:

host:数据库主机名.默认是用本地主机.

user:数据库登陆名.默认是当前用户.

passwd:数据库登陆的秘密.默认为空.

db:要使用的数据库名.没有默认值.

port:MySQL服务使用的TCP端口.默认是3306.

charset:数据库编码。

unix_socket:指定mysql的socket路径,如:unix_socket='/var/mysql/mysql.sock'

创建连接:conn = MySQLdb.connect(user='root',passwd='111111',host='localhost',port=3306, unix_socket='/var/mysql/mysql.sock',charset='utf8')

释放连接:

释放连接时可以应用Connection类型对象的close方法。一般操作完数据库后,需要关闭连接conn.close()

Cursor(游标)对象:

执行SQL语句前要获得一个指定连接的Cursor对象,由Cursor对象执行SQL查询并获取结果。

获得Cursor对象的方法cur = conn.cursor()

关闭Cursor:

执行SQL结束后正常要关闭cursor对象cur.close()

查询,插入,更新、删除操作:

Cursor类型提供了execute方法用于执行SQL操作execute(query [,parameters])

query是一个SQL字符串,parameters是一个序列或映射,返回值是所影响的记录数

查询

cur.execute("select user,host from mysql.user)

cur.execute("select * from user where name = %s and age = %s", {'name':'drfdai', 'age'30})

这里和字符串的格式化操作类似,但不管参数是什么类型,都要用'%s'

获取结果

获取结果集有三种方法,fetchone、fetchall和fetchmany,返回结果是一个tuple对象,tuple中的每一个元素对应查询结果中的一条记录。

fetchone()返回结果集中的一条记录

fetchall()返回结果集中的所有记录

fetchmany([N])返回结果集中N条记录

插入、更新、删除

cur.execute("insert user (name, age) values(%s, %s)", ('drfdai', 20))

更新和删除的操作与更新、删除类似

除了execute,Cursor类还提供了executemany()方法

executemany(query [, parametersequence])

querey是一个查询字符串,parametersequence是一个参数序列。这一序列的每一项都是一个序列或映射象。但executemany只适合插入、更新或删除操作,而不适用于查询操作。

cur.execute("insert user(name, age) values(%s, %s)", (('drf', 31), ('jiang', 21)))

提交

mysql现在一般会默认InnoDB作为默认引擎,InnoDB引擎执行插入、更新、删除操作后要进行提交,才会更新数据库,因此需要用commit()提交后,才会生效执行的SQL

cur.commit()

回滚

如果在执行事务SQL时,需要回滚的话,就用以下rollback()

rollback()

对以上操作,进行一个简单的函数封装,这样用起来更方便,特别是需要经常读写数据库的时候,省事,以下是我封装好的简单函数:#!/usr/bin/env python

#coding=utf-8

import MySQLdb

import logging

#定义错误日志路径

error_log = '/'.join((pro_path,'log/task_error.log'))

#定义日志输出格式

logging.basicConfig(level=logging.ERROR,

format = '%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',

datefmt = '%Y-%m-%d %H:%M:%S',

filename = error_log,

filemode = 'a')

#定义数据库参数

db_name = 'task'

db_user = 'root'

db_pass = '111111'

db_ip = 'localhost'

db_port = 3306

def writeDb(sql,db_data=()):

"""

连接mysql数据库(写),并进行写的操作

"""

try:

conn = MySQLdb.connect(db=db_name,user=db_user,passwd=db_pass,host=db_ip,port=int(db_port))

cursor = conn.cursor()

except Exception,e:

print e

logging.error('数据库连接失败:%s' % e)

return False

try:

cursor.execute(sql,db_data)

conn.commit()

except Exception,e:

conn.rollback()

logging.error('数据写入失败:%s' % e)

return False

finally:

cursor.close()

conn.close()

return True

def readDb(sql,db_data=()):

"""

连接mysql数据库(从),并进行数据查询

"""

try:

conn = MySQLdb.connect(db=db_name,user=db_user,passwd=db_pass,host=db_ip,port=int(db_port))

cursor = conn.cursor()

except Exception,e:

print e

logging.error('数据库连接失败:%s' % e)

return False

try:

cursor.execute(sql,db_data)

data = [dict((cursor.description[i][0], value) for i, value in enumerate(row)) for row in cursor.fetchall()]

except Exception,e:

logging.error('数据执行失败:%s' % e)

return False

finally:

cursor.close()

conn.close()

return data

如果数据库连接失败,把错误写入日志,并返回Flase。

writeDb是用来写入数据的,如果写入失败,写会把错误写入服务器日志中,然后返回False,如果成功,返回True。

readDb是用来读取数据的,如果读取失败,写会把错误写入服务器日志中,然后返回False,如果成功,则返回查询到的数据,数据类型是经过处理好的字典格式。

以下是writeDb和readDb使用的方法:@route('/api/getuser',method="POST")

def getuser():

sql = "select * from user;"

userlist = readDb(sql,)

return json.dumps(userlist)

@route('/adduser',method="POST")

def adduser():

name = request.forms.get("name")

age = request.forms.get("age")

sex = request.forms.get("sex")

qq = request.forms.get("qq")

email = request.forms.get("email")

departmentid = request.forms.get("department")

if not name or not age or not sex or not qq or not email or not departmentid:

return '-2'

sql = """

INSERT INTO

user(name,age,sex,qq,email,departmentid)

VALUES(%s,%s,%s,%s,%s,%s)

"""

data = (name,age,sex,qq,email,departmentid)

result = writeDb(sql,data)

if result:

return '0'

else:

return '-1'

python数据库操作框架_python bottle 框架操作数据库相关推荐

  1. python bottle框架 运维_python bottle框架(WEB开发、运维开发)教程 | linux系统运维...

    教程目录 一:python基础 二:bottle基础 python bottle 框架基础教程:环境部署 三:WEB开发教程 四:运维开发教程 运维开发(1.1):框架.结构介绍 运维开发(1.2): ...

  2. python bottle 制作表单_python bottle框架

    python bottle框架 简介: Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Python的标准库外,其不依赖任何其他模块. Bottl ...

  3. python 服务器框架_python 服务器框架

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 而我的想法是,掌握一个类似于框架的高级工具是有用的,但是基础的东西可以让你永远不 ...

  4. python三大框架_python 三大框架的 介绍。

    在python语言中,有着特别厉害的三大框架. 这三个框架分别为:Flask框架,Tornado框架,Django框架. Flask框架:Flask诞生于2010年,是Armin ronacher(人 ...

  5. python制作考试系统_python测试框架数据生成工具最全资源汇总

    xUnit frameworks 单元测试框架 frameworks 框架 unittest - python自带的单元测试库,开箱即用 unittest2 - 加强版的单元测试框架,适用于Pytho ...

  6. python api开发用什么框架_python api框架

    关于 python api框架的搜索结果 问题 哪种python框架仅适合于api 我是Python的新手,并希望使用python构建其余的完整Web服务.由于某些依赖性,无法使用任何其他脚本语言. ...

  7. python安装flask框架_Python Flask框架的安装

    Flask 框架是 Python 中一个比较重要的框架,在开发网站中极具优势,下面进行具体介绍. FIask框架简介 Flask 是当前流行的 Web 网站框架,它是基于 Python 实现的.Fla ...

  8. python操作目录_Python语言目录操作一

    本文主要向大家介绍了Python语言目录操作一,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 目录操作 Python os 模块提供了一个统一的操作系统接口函数, 这些接口函数通 ...

  9. python 爬虫哪个好_Python爬虫框架哪个最好用最简单

    想使用python爬虫框架开发个爬虫,但目前了解有限,希望大家帮忙推荐几个,谢谢啦~ 另外,大家平常工作中都使用python干些什么事情呢?网站开发?爬虫?还是运维? scrapy 爬虫框架.纯pyt ...

最新文章

  1. 大模型时代,我们真的不再需要分词了吗?
  2. 服务器硬盘维修工具,服务器硬盘镜像备份和恢复工具_OO DiskImage Server V8.5.39 服务器版...
  3. DDD“上吊绳驱动开发”,开发要想不被“吊死”,该如何自救?
  4. art-template入门(八)之选项
  5. XML解析:PULL解析
  6. sap系统搭建教程_SAP系统和微信集成的系列教程之十:如何在SAP C4C系统里直接回复消息给微信用户...
  7. #pragma once 与 #ifndef 解析(转载)
  8. 用于创建此对象的程序是package_21个最佳Flutter软件包,用于简化Flutter应用开发...
  9. C#网络编程----文件流
  10. 转载:应用架构、业务架构、技术架构和业务流程图
  11. Chrome 咕咕牛懒器(guge niú lǎn qì) 安装 及助手插件操作
  12. AutoCAD2017下载安装教程
  13. MCE | “神药”二甲双胍后,糖尿病药物研究谁将是下一个顶流?
  14. 来自全网超火的Android面试笔记GitHub下载量过百万
  15. jQuery源码分析之实例find和filter方法的区别七问
  16. linux i2c 内核初始io,linux I2C驱动移植
  17. Package is in a very bad inconsistent state
  18. QQ注册界面仿写(HTML+CSS+JS)
  19. Java简易版的对战小游戏(主题是三国类游戏对战)
  20. 用python自己写一个翻译软件

热门文章

  1. Extension field添加到CDS view上的技术实现
  2. SAP Cloud for Customer销售订单External Note的建模细节
  3. 分享一个开源的JavaScript统计图表库,40行代码实现专业统计图表
  4. java中0l 1_Java基础笔记1 - osc_0ltyoebk的个人空间 - OSCHINA - 中文开源技术交流社区...
  5. 专家系统出现的计算机应用阶段,接本第一二章历年考题08-12
  6. iphone开蓝牙wifi上网慢_为啥我开锁总是比别人慢?
  7. 龙之谷哪个服务器最多,龙之谷哪些服务器数据互通 龙之谷数据互通详情介绍...
  8. ios解锁动态图片_iOS 苹果开机启动的 滑动来解锁动画
  9. vuecli4 启动_vue 常见命令 (启动 部署)
  10. abb软启动器pstx手册_关于 ABB工业机器人碰撞检测功能的介绍