Python MySQL 数据库
原文链接:http://www.one2know.cn/python9/
python DB API
- python访问数据库的统一接口规范,完成不同数据库的访问
- 包含的内容:
connection cursor exceptions - 访问数据库流程: 1.创建connection 2.获取cursor 3.操作 4.关闭cursor 5.关闭connection
python MySQL开发环境

连接对象connection
- 连接对象: python客户端与数据库的网络连接
- 创建方法:
pymysql.connect(参数)

- connection对象支持的方法:

- 例子:
import pymysql
conn = pymysql.connect(
host = '127.0.0.1',
port = 3306,
user = 'root',
db = 'database1',
charset = 'utf-8')
cursor = conn.cursor()
print(conn)
print(cursor)
cursor.close()
conn.close()
游标对象cursor
- 游标对象: 用于执行查询和获取结果
- cursor对象支持的方法:

execute()方法: 执行SQL,将结果从数据库获取到客户端

fetch*()方法: 移动rownumber,返回数据

实例 - select查询数据
- 流程

- 代码
import pymysql
conn = pymysql.connect(
host = '127.0.0.1',
port = 3306,
user = 'root',
db = 'database1',
charset = 'utf-8'
)
cursor = conn.cursor()
sql = "select * from table"
cursor.execute(sql)
print(cursor.rowcount)
rs = cursor.fetchone()
print(rs)
rs = cursor.fetchmany(3)
print(rs)
rs = cursor.fetchall()
print(rs)
cursor.close()
conn.close()
实例 - insert/update/delete更新数据
- 流程

- 事务: 访问和更新数据库的一个程序执行单元

- 开发中怎样使用事务
1.关闭自动commit: 设置conn.autocommit(False),默认就是这个状态
2.正常结束事务: conn.commit()
3.异常结束任务: conn.rollback() - 代码
import pymysql
conn = pymysql.connect(
host = '127.0.0.1',
port = 3306,
user = 'root',
db = 'database1',
charset = 'utf-8'
)
cursor = conn.cursor()
sql_insert = "insert into database1(userid,username) values(10,'name10')"
sql_update = "update database1 set username='name91' where userid = 9"
sql_delete = "delete from database1 where userid < 3"
try:
cursor.execute(sql_insert)
print(cursor.rowcount) # 查看对多少行造成了影响
cursor.execute(sql_update)
print(cursor.rowcount)
cursor.execute(sql_delete)
print(cursor.rowcount)
conn.commit() #提交,更新数据库
exception Exception as e:
print e
conn.rollback() #回滚,只要有一条有错就啥都不提交了
cursor.close()
conn.close()
银行转账实例 - A给B转账100元
- 流程

- 实例数据库
- 代码
# coding:utf8
import pymysql
import sys
class TransferMoney(object):
def __init__(self,conn):
self.conn = conn
def check_acct_available(self,acctid):
cursor = self.conn.cursor()
try:
sql = "select * from account where acctid=%s" % acctid
cursor.execute(sql)
print("check_acct_available:"+sql)
rs = cursor.fetchall()
if len(rs)!=1:
raise Exception("账号%s不存在" % acctid)
finally:
cursor.close()
def has_enough_money(self,acctid, money):
cursor = self.conn.cursor()
try:
sql = "select * from account where acctid=%s and money>%s" % (acctid,money)
cursor.execute(sql)
print("has_enough_money:" + sql)
rs = cursor.fetchall()
if len(rs) != 1:
raise Exception("账号%s没有足够的钱" % acctid)
finally:
cursor.close()
def reduce_money(self,acctid):
cursor = self.conn.cursor()
try:
sql = "update account set money=money-%s where acctid=%s" % (money,acctid)
cursor.execute(sql)
print("reduce_money:" + sql)
rs = cursor.fetchall()
if cursor.rowcount != 1:
raise Exception("账号%s减款失败" % acctid)
finally:
cursor.close()
def add_money(self,acctid):
cursor = self.conn.cursor()
try:
sql = "update account set money=money+%s where acctid=%s" % (money, acctid)
cursor.execute(sql)
print("reduce_money:" + sql)
rs = cursor.fetchall()
if cursor.rowcount != 1:
raise Exception("账号%s加款失败" % acctid)
finally:
cursor.close()
def transfer(self,source_acctid,target_acctid,money):
try:
self.check_acct_available(source_acctid)
self.check_acct_available(target_acctid)
self.has_enough_money(source_acctid,money)
self.reduce_money(source_acctid)
self.add_money(target_acctid)
self.conn.commit()
except Exception as e:
self.conn.rollback()
raise e
if __name__ == "__main__":
source_acctid = sys.argv[1]
target_acctid = sys.argv[2]
money = sys.argv[3]
conn = pymysql.connect(host='127.0.0.1',user='root',
passwd='123456',port=3306,db='database1')
tr_money = TransferMoney(conn)
try:
tr_money.transfer(source_acctid,target_acctid,money)
except Exception as e:
print("出现问题:"+str(e))
finally:
conn.close()
Python MySQL 数据库的更多相关文章
- python mysql数据库压力测试
python mysql数据库压力测试 pymysql 的执行时间对比 1,装饰器,计算插入1000条数据需要的时间 def timer(func): def decor(*args): start_ ...
- 10分钟教你Python+MySQL数据库操作
欲直接下载代码文件,关注我们的公众号哦!查看历史消息即可! 本文介绍如何利用python来对MySQL数据库进行操作,本文将主要从以下几个方面展开介绍: 1.数据库介绍 2.MySQL数据库安装和设置 ...
- python+mysql数据库的简单操作
最近接了一个任务,测试某项类似于收益情况报表的功能,因计算公式复杂,单纯手算过于复杂,所以想到写成脚本 根据python的分治原则,先整了几个函数用于实现计算逻辑,后发现数据输入过于繁琐,所以决定使用 ...
- python mysql数据库基本操作方法
实现:使用Python实现用户登录,如果用户存在(数据库表中存在)则登录成功(假设该用户已在数据库中) import pymysql username = input('输入用户名:').strip( ...
- python mysql数据库操作
一.pymysql 模块安装(本文博客推荐:https://www.cnblogs.com/clschao/articles/10023248.html) pip3 install pymysql 二 ...
- python mysql数据库中 json的存储
首先数据库里的字段类型需要设置为json: 存储这个json时需要把这个json变为字符串,而且是最外层为单引号,内部字符串为双引号!如图: 所以python脚本中这个字段的字符串应该这样写: 得出 ...
- python --- mysql数据库的操作
1.pymysql的初使用 import pymysql db_config = { 'host' :'127.0.0.1', 'user':'root', ', , 'database':'test ...
- 【转】python mysql数据库 'latin-1' codec can't encode character错误问题解决
UnicodeEncodeError: 'latin-1' codec can't encode character "UnicodeEncodeError:'latin-1' code ...
- python mysql数据库 'latin-1' codec can't encode character错误问题解决
"UnicodeEncodeError:'latin-1' codec can't encode character ..." This is because MySQLd ...
随机推荐
- Android的简述3
Activity的生命周期 Activity类中有许多onXXX形式的函数可以重载,比如onCreate,onStart,onStop,onPause,那么它们的调用顺序到底是如何的呢?下面就通过一个 ...
- mybatis动态插入数据库
<insert id="dynamicAddUser"> insert into t_user <!-- trim 对所有的表中列名 进行动态处理 --> ...
- R语言学习笔记——C#中如何使用R语言setwd()函数
在R语言编译器中,设置当前工作文件夹可以用setwd()函数. > setwd("e://桌面//")> setwd("e:\桌面\")> s ...
- 【iOS】沙盒目录
有关沙盒目录参考: http://blog.csdn.net/totogo2010/article/details/7669837 获取沙盒路径,参考代码: NSArray *paths = NSSe ...
- css3系列之详解perspective
perspective 简单来说,就是设置这个属性后,那么,就可以模拟出像我们人看电脑上的显示的元素一样.比如说, perspective:800px 意思就是,我在离屏幕800px 的地方观看这 ...
- Git 学习笔记之(一) 使用 git gui 从github上下载代码
背景: 目前一些开源代码均在 GitHub上管理的,包括自己写的代码也可以放在上面进行管理.但问题是,当你换一台电脑,想要将你自己放在 GitHub 上的代码工程下载下来的时候,会遇到各种问题,目前可 ...
- 分布式ID系列(4)——Redis集群实现的分布式ID适合做分布式ID吗
首先是项目地址: https://github.com/maqiankun/distributed-id-redis-generator 关于Redis集群生成分布式ID,这里要先了解redis使用l ...
- table 表格 细边框 最简单样式
table 表格细边框的效果实现方法虽然不难,但网上简单有效的方法却很少,在此记录一下 css 样式 /** table 细边框 **/ table{border-collapse: collapse ...
- Go中的字符串使用----strings和strconv
Go中的字符串操作 字符串是工作中最常用的,值得我们专门的练习一下.在Go中使用strings包来操作字符串,这也是内置的包哈,不像Java中要么手写,要么引入common-lang 或者 别的第三方 ...
- Excel批量导入(导出同理)
在做JavaWeb中添加数据使我们在所难免会遇到的,在大数据的环境下批量添加和批量删除是必须的,而批量删除只需要获取到我们需要删除的ID就可以了,在批量添加中我们就会遇到问题,问题是得到批量的数据,这 ...