python数据库操作框架_python bottle 框架操作数据库
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 框架操作数据库相关推荐
- python bottle框架 运维_python bottle框架(WEB开发、运维开发)教程 | linux系统运维...
教程目录 一:python基础 二:bottle基础 python bottle 框架基础教程:环境部署 三:WEB开发教程 四:运维开发教程 运维开发(1.1):框架.结构介绍 运维开发(1.2): ...
- python bottle 制作表单_python bottle框架
python bottle框架 简介: Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Python的标准库外,其不依赖任何其他模块. Bottl ...
- python 服务器框架_python 服务器框架
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 而我的想法是,掌握一个类似于框架的高级工具是有用的,但是基础的东西可以让你永远不 ...
- python三大框架_python 三大框架的 介绍。
在python语言中,有着特别厉害的三大框架. 这三个框架分别为:Flask框架,Tornado框架,Django框架. Flask框架:Flask诞生于2010年,是Armin ronacher(人 ...
- python制作考试系统_python测试框架数据生成工具最全资源汇总
xUnit frameworks 单元测试框架 frameworks 框架 unittest - python自带的单元测试库,开箱即用 unittest2 - 加强版的单元测试框架,适用于Pytho ...
- python api开发用什么框架_python api框架
关于 python api框架的搜索结果 问题 哪种python框架仅适合于api 我是Python的新手,并希望使用python构建其余的完整Web服务.由于某些依赖性,无法使用任何其他脚本语言. ...
- python安装flask框架_Python Flask框架的安装
Flask 框架是 Python 中一个比较重要的框架,在开发网站中极具优势,下面进行具体介绍. FIask框架简介 Flask 是当前流行的 Web 网站框架,它是基于 Python 实现的.Fla ...
- python操作目录_Python语言目录操作一
本文主要向大家介绍了Python语言目录操作一,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 目录操作 Python os 模块提供了一个统一的操作系统接口函数, 这些接口函数通 ...
- python 爬虫哪个好_Python爬虫框架哪个最好用最简单
想使用python爬虫框架开发个爬虫,但目前了解有限,希望大家帮忙推荐几个,谢谢啦~ 另外,大家平常工作中都使用python干些什么事情呢?网站开发?爬虫?还是运维? scrapy 爬虫框架.纯pyt ...
最新文章
- 大模型时代,我们真的不再需要分词了吗?
- 服务器硬盘维修工具,服务器硬盘镜像备份和恢复工具_OO DiskImage Server V8.5.39 服务器版...
- DDD“上吊绳驱动开发”,开发要想不被“吊死”,该如何自救?
- art-template入门(八)之选项
- XML解析:PULL解析
- sap系统搭建教程_SAP系统和微信集成的系列教程之十:如何在SAP C4C系统里直接回复消息给微信用户...
- #pragma once 与 #ifndef 解析(转载)
- 用于创建此对象的程序是package_21个最佳Flutter软件包,用于简化Flutter应用开发...
- C#网络编程----文件流
- 转载:应用架构、业务架构、技术架构和业务流程图
- Chrome 咕咕牛懒器(guge niú lǎn qì) 安装 及助手插件操作
- AutoCAD2017下载安装教程
- MCE | “神药”二甲双胍后,糖尿病药物研究谁将是下一个顶流?
- 来自全网超火的Android面试笔记GitHub下载量过百万
- jQuery源码分析之实例find和filter方法的区别七问
- linux i2c 内核初始io,linux I2C驱动移植
- Package is in a very bad inconsistent state
- QQ注册界面仿写(HTML+CSS+JS)
- Java简易版的对战小游戏(主题是三国类游戏对战)
- 用python自己写一个翻译软件
热门文章
- Extension field添加到CDS view上的技术实现
- SAP Cloud for Customer销售订单External Note的建模细节
- 分享一个开源的JavaScript统计图表库,40行代码实现专业统计图表
- java中0l 1_Java基础笔记1 - osc_0ltyoebk的个人空间 - OSCHINA - 中文开源技术交流社区...
- 专家系统出现的计算机应用阶段,接本第一二章历年考题08-12
- iphone开蓝牙wifi上网慢_为啥我开锁总是比别人慢?
- 龙之谷哪个服务器最多,龙之谷哪些服务器数据互通 龙之谷数据互通详情介绍...
- ios解锁动态图片_iOS 苹果开机启动的 滑动来解锁动画
- vuecli4 启动_vue 常见命令 (启动 部署)
- abb软启动器pstx手册_关于 ABB工业机器人碰撞检测功能的介绍