python与MySQL数据库

慕课网连接

我使用的软件:python2.7 + MySQL+ Navicat for MySQL + Atom

注意:你的数据库表格类型的引擎为:InnoDB ;字符集:utf8 ;排序规则:utf8_general_ci


Python开发MySQL的思想:

图片来自慕课网视频截图:

其中我使用的编辑器是Atom,MySQL数据库的客户端是Navicat for MySQL。

python DB API

思想:

  • 由connection建立数据库连接
  • 由cursor执行SQL语句和获取数据

具体操作:

  1. 创建connection对象
  2. 获取cursor
  3. 使用cursor执行SQL语句
  4. 使用cursor获取数据,并判断执行状态
  5. 提交事务或者回滚事务
  6. 关闭cursor ,关闭connection

创建connection对象:

通过下面这一行代码进行与数据库的连接。

	import MySQLdb

	    conn = MySQLdb.Connect(
host = '127.0.0.1',
port = 3306,
user = 'your user_name',
passwd = 'your passwd',
db = 'your db_name',
charset = 'utf8'
)

获取cursor:

cursor 是一个游标,用于指定数据库的表中的某一行

	cursor = conn.cursor()

使用cursor执行SQL语句:

cursor执行SQL语句就相当于在数据库中的查询操作:

	sql_sentence = 'your sql_sentence'
cursor.execute(sql_sentence)

通过上面这行代码既可以对数据库进行增,删,改,查等操作


使用cursor获取数据,并判断执行状态:

获取数据有三种方式:

	rs = cursor.fetchall()		 //获取当前游标往下的所有数据
rs = cursor.fetchone() //获取当前游标所在行的数据
rs = cursor.fetchmany(x) //获取当前游标往下 x 行的数据

此后即可以通过对rs的操作,输出我们所需要的数据,例如:

	for row in rs:
print "userid=%s,username=%s" %row

提交事务或者回滚事务:

事务的概念就是一组需要同时完成的事情,例如往a转钱给b,那么就需要有同时判断两个账户是否存在,a是否有足够的钱,若有,a扣款的同时b要存款等。

这是一系列要同时考虑的事情,如果在中间不满足条件,则需要回滚事务,即返回到之前的初始状态。

	conn.commit()  	 //提交事务
conn.rollback() //回滚事务

在此,我们通常将某一事务放在一个try的代码块中,当出现错误的时候,在except块中报错以及回滚事务:

    def transfer(self,sourse_acctid,target_acctid,money):  // 很普通的一个转钱的函数
try:
self.check_acct_available(sourse_acctid)
self.check_acct_available(target_acctid)
self.has_enough_money(sourse_acctid,money)
self.reduce_money(sourse_acctid,money)
self.add_money(target_acctid,money) //在此列函数调用中,如果出现错误,会将错误信息给Exception,同时回滚事务;如果顺利执行,则进行下一步:提交事务。 self.conn.commit() //提交事务 except Exception as e: self.conn.rollback() //回滚事务 raise e //报错

关闭cursor,关闭connection:

为了防止浪费资源,在每次游标进行完操作后,都要关闭游标,在对数据库完成操作后要关闭数据库连接。

	cursor.close()
conn.close()

注意事项:

最新文章

  1. 关于CryptoJS中md5加密以及aes加密的随笔
  2. VS Code - Debugger for Chrome调试JavaScript的两种方式
  3. FactoryMethodPattern(工厂方法)
  4. [Docker] docker 基础学习笔记5(共6篇)
  5. Java提高篇(三八)-----Java集合细节(四):保持compareTo和equals同步
  6. 编码Q&A
  7. Error 2147943712 during task creation
  8. [转]String.getBytes()和new String()
  9. 给Adobe Reader添加书签功能
  10. D&F学数据结构系列——红黑树
  11. nyoj 448 寻找最大数
  12. java入门了解02
  13. Mysql 查询重复的记录
  14. .Net中集合排序还可以这么玩
  15. MTK8127源码编译出现的错误及相关解决办法
  16. UI对象库-定位元素与程序分离
  17. es简单打造站内搜索
  18. CentOS下安装yum源的流程和操作
  19. 如何使用油猴脚本不要vip就能观看各大视频网站如腾讯,爱奇艺等的vip视频
  20. React 与 React Native 底层共识:React 是什么

热门文章

  1. 第十五章 函数————函数的递归、生成器send 、匿名函数
  2. Spring整合JUnit spring静态对象属性的注入
  3. noip2018 洛谷 P5020 货币系统
  4. Python的静态方法和类方法
  5. Java分享笔记:使用entrySet方法获取Map集合中的元素
  6. motto - question - bodyParser.urlencoded 中设置 extended 为 true 和 false 有什么区别吗?
  7. 文本处理工具-AWK
  8. 交换机基础设置之vtp管理vlan设置
  9. 微信小程序相关
  10. Ubuntu16.04下配置ssh免密登录