python访问数据库

1. python DB api简介

python DB api python访问数据库的统一接口规范,详细可参考https://www.python.org/dev/peps/pep-0249/

python DB api中主要包括三个重要的对象 数据库连接对象 connection,数据库交互对象 cursor和数据库异常类 exceptions

2. 使用python DB API访问数据库的流程

3. python+MYSQL开发环境的配置

python-mysql connector 用于python和mysql服务器进行连接,下载地址 https://sourceforge.net/projects/mysql-python/

syslog是一个Mysql可视化的管理工具, 下载地址 https://sqlyog.en.softonic.com/

4 connection对象

使用方法MySQLdb.connection(host,port,user,passwd,db,charset)返回一个connection对象

connection对象支持的方法有

方法 说明
cursor()  使用该连接创建并返回的游标
commit()  提交当前事务
rollback()  回滚当前事务
close()  关闭连接

连接数据库

 1 import MySQLdb
 2 conn = MySQLdb.Connect(host = ‘127.0.0.1‘,
 3                           port = 3306,
 4                           user = ‘root‘,
 5                           passwd = ‘123456‘,
 6                           db = ‘test‘,
 7                           charset=‘utf8‘)
 8 cur = conn.cursor()
 9 cur.close()
10 conn.close()

5. 数据库游标对象cursor

cursor对象的方法

  execute(op[,args]) 执行一个数据库查询和命令

  fetchone() 取得结果集中下一行

  fetchmany(size) 获取结果集中下几行

  fetchall() 获取结果集剩下的所有行

  rowcount 最近一次execute返回的数据的行数或影响的行数

  close() 关闭游标对象

我们在数据库中建立了一个test数据库,在其中建立了一个user表如下图所示

利用cursor对象来执行简单的查询语句

 1 import MySQLdb
 2 conn = MySQLdb.Connect(host = ‘127.0.0.1‘,
 3                           port = 3306,
 4                           user = ‘root‘,
 5                           passwd = ‘123456‘,
 6                           db = ‘test‘,
 7                           charset=‘utf8‘)
 8 cur = conn.cursor()
 9 sql = ‘select * from user‘
10 cur.execute(sql)
11 print cur.rowcount
12 print cur.fetchone()
13 print cur.fetchmany(3)
14 print cur.fetchall()
15 cur.close()
16 conn.close()

输出

9 (1L, u‘name1‘) ((2L, u‘name2‘), (3L, u‘name3‘), (4L, u‘name4‘)) ((5L, u‘name5‘), (6L, u‘name6‘), (7L, u‘name7‘), (8L, u‘name8‘), (9L, u‘name9‘))

6. 事务处理

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

原子性:事务中包括的诸操作要么都做,要么都不做

一致性:事务必须使数据库从一致性状态变到另一个一致性状态

隔离性:一个事务的执行不能被其他事务干扰

持久性:事务一旦提交,它对数据库的改变是永久性的

开发中怎样使用事务?

关闭自动commit:设置conn.autocommit(False)

正常结束事务:conn.commit()

异常结束事务:conn.rollback()

代码示例

 1 import MySQLdb
 2 conn = MySQLdb.Connect(host = ‘127.0.0.1‘,
 3                           port = 3306,
 4                           user = ‘root‘,
 5                           passwd = ‘123456‘,
 6                           db = ‘test‘,
 7                           charset=‘utf8‘)
 8 cur = conn.cursor()
 9 sql_insert = "insert into user(usrid, usrname) values(10, ‘name10‘)"
10 sql_delete = "delete from user where usrid<3"
11 sql_update = "update user set usrname = ‘name91‘ where usrid=9"
12 try:
13     cur.execute(sql_insert)
14     cur.execute(sql_update)
15     cur.execute(sql_delete)
16     conn.commit()
17 except Exception as e:
18     print e
19     conn.rollback()
20 cur.close()
21 conn.close()

7. 银行转账实例

假设张三要向王五转账100元,其转账流程如下图所示

代码实现

 1 import MySQLdb
 2 def checkAccountAvailable(conn,username):
 3     cur = conn.cursor()
 4     sql = "select * from account where username=‘%s‘"%username
 5     print sql
 6     cur.execute(sql)
 7     r = cur.rowcount
 8     print r
 9     cur.close()
10     return r
11
12 def account(conn, username):
13     cur=conn.cursor()
14     sql = "select * from account where username=‘%s‘"%username
15     print sql
16     cur.execute(sql)
17     account = cur.fetchone()[1]
18     cur.close
19     return  account
20 def main():
21     conn = MySQLdb.Connect(host = ‘127.0.0.1‘,
22                           port = 3306,
23                           user = ‘root‘,
24                           passwd = ‘123456‘,
25                           db = ‘test‘,
26                           charset=‘utf8‘)
27     if checkAccountAvailable(conn,‘zhangsan‘) and checkAccountAvailable(conn,‘wangwu‘):
28         if account(conn,"zhangsan") >= 100:
29             try:
30                 cur = conn.cursor()
31                 cur.execute("update account set account=account-100 where username=‘zhangsan‘")
32                 cur.execute("update account set account=account+100 where username=‘wangwu‘")
33                 conn.commit()
34             except Exception as e:
35                 print e
36                 conn.rollback()
37             finally:
38                 cur.close()
39         else:
40             print "zhangsan has not enough money"
41     else:
42         print "account not existed"
43
44     conn.close()
45 main()

null

时间: 2024-10-23 22:23:04

python访问数据库的相关文章

python访问数据库一

直接访问mysql,示例如下: # coding:utf-8 import time import MySQLdb # import traceback # import sys conn = MySQLdb.connect(host='127.0.0.1', port=3306, user='root', passwd='root', db='dev', charset="utf8", ) cur = conn.cursor() # cur.execute("SET NAM

python: 数据库编程

sqlite:基于文件的关系数据库,已经包含在python标准库中. gadfly:用python写的基于文件的关系数据库 mysql:基于服务器的关系数据库 postgresql:基于服务器的关系数据库 python访问数据库的两种方式: 1.  ORM 2.  DB-API ################################################################### ORM:对象-关系管理器,如果不希望直接嵌入sql可以使用ORM. ORM模块: 1

python访问mysql

备注:此教程默认系统已安装python1. 安装mysql 安装mysql分两种形式,1种是安装包安装,另外一种是直接下载文件包自己配置. 在下载的时候要分系统32bit,64bit,如果在mysql官网,即 Oracle官网下载安装,需要注册才能下载. 1) 安装包安装比较简单,直接点击安装包一直next下去安装.2) 主要讲一下非安装包安装:(主要是你下载的安装包找不到exe后缀安装文件的压缩包),超级简单. 主要参考网址:http://jingyan.baidu.com/article/5

Python访问MySQL数据库

#encoding: utf-8 import mysql.connector __author__ = 'Administrator' config={'host':'127.0.0.1',#默认127.0.0.1 'user':'root', 'password':'root', 'port':3306 ,#默认即为3306 'database':'test', 'charset':'utf8'#默认即为utf8 } if __name__=="__main__": print(c

Python访问MongoDB数据库

#encoding: utf-8 __author__ = 'Administrator' #import pymongo from pymongo import MongoClient,GEO2D import sqlite3 import sys import psycopg2 import ppygis import cx_Oracle import datetime reload(sys) #中文错误 sys.setdefaultencoding( "utf-8" ) #mon

Python中通过cx_Oracle访问数据库遇到的问题总结

以下是Python中通过cx_Oracle操作数据库的过程中我所遇到的问题总结,感谢我们测试组的前辈朱勃给予的帮助最终解决了下列两个问题: 1)安装cx_Oracle会遇到的问题:在Windows下安装cx_Oracle不要尝试用pip install的方式了!下载官网的对应版本的msi安装文件,我的python2.7是32位的,oracle的instantClient也是32位的,这个cx_Oracle也选择32位的下载,安装成功后进入python模式下import cx_Oracle没问题,

Python访问MySQL数据库并实现其增删改查功能

概述: 对于访问数据库的操作,我想大家也都有一些了解.不过,因为最近在学习Python,以下就用Python来实现它.其中包括创建数据库和数据表.插入记录.删除记录.修改记录数据.查询数据.删除数据表.删除数据库.还有一点就是我们最好使用一个新定义的类来处理这件事.因为这会使在以后的使用过程中更加的方便(只需要导入即可,避免了重复制造轮子). 实现功能介绍: 1.封装一个DB类 2.数据库操作:创建数据库和数据表 3.数据库操作:插入记录 4.数据库操作:删除记录 5.数据库操作:修改记录数据

python sqlite3 数据库操作

SQLite3是python的内置模块,是一款非常小巧的嵌入式开源数据库软件. 1. 导入Python SQLite数据库模块 import sqlite3 2. python sqlite3模块的API """ sqlite3.connect(database [,timeout ,other optional arguments]) 该 API 打开一个到 SQLite 数据库文件 database 的链接.您可以使用 ":memory:" 来在 RA

python之数据库的操作(课前准备)

数据库(Database)是按照数据结构来组织.存储和管理数据的仓库. 上面的就是数据库的定义. 何为数据库,简单的来说,就是我们的大型数据的存放地点. 而我们学习的呢就是数据库的访问层的制作. 何为访问层呢? 上面是一个简单的购物网站的流程图. ———————————————————————————————————————— 在python操作数据库这个这个过程当中呢,有一个叫做API的接口,这个接口是python自己给我们带来的一个配件按,有了这个配件我们就能够将数据库与python相连接.