Python 数据库操作 -- Mysql 数据库

Python DB API

价值

Python访问数据库的统一接口规范,开发者不必再去针对不同数据库实现不同API

官网

https://www.python.org/dev/peps/pep-0249/

内容

使用流程

开发环境搭建

环境

Python代码开发(Sublime Text3 / Notepad ++)

Python客户端 AND Python-MySQL connector

Mysql服务器(Mysql5.7 AND Navicat)

安装Python-MySQL connector及遇到的问题

安装

win cmd 中输入 easy_install MySQL-python    或者     pip install MySQL-python

Linux apt-get install python-dev    或者     yum install python-devel

最笨的方法,到http://www.cr173.com/soft/22957.html这里下载了MySQL-python.rar安装包进行安装。

问题

Microsoft Visual C++ 9.0 is required  (Unable to find vcvarsall.bat)

http://www.cnblogs.com/lemonlemontree/p/6921333.html

Cannot open include file: ‘config-win.h‘: No such file or directory

http://www.cnblogs.com/dadadechengzi/p/6131799.html

site.cfg需要下载MySQL-python的源代码包

导入Python-MySQL完成

>>> import MySQLdb

>>> print MySQLdb

<module ‘MySQLdb‘ from ‘C:\Python27\lib\site-packages\mysql_python-1.2.5-py2.7-win-amd64.egg\MySQLdb\__init__.pyc‘>

数据库连接对象--connection

作用

建立Python客户端与数据库的网络连接

创建方法

实例名=Mysqldb.connect(参数)

host--字符串--mysql服务器地址

port--数字--mysql服务器端口号

user--字符串--用户名

passwd--字符串--密码

db--字符串--数据库名

charset--字符串--连接编码

实例方法

cursor()--使用该链接创建并返回游标

commit()--提交当前事务

rollback()--回滚当前事务

close()--关闭连接

数据库游标对象--cursor

作用

用于执行查询和获取结果

实例方法

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

fetchone()--获取下一行数据

fetchmany(size)--获取下size行数据

fetchall()--获取剩下的所有行(可直接使用for xx in cursor实例 来对cursor实例进行迭代)

rowcount--最近一次execute返回数据的行数或影响的行数,请注意,它是属性。

rownumber--下一次使用fetchxxx时的index

close()--关闭游标

Python之Select查询操作

理念

实例:

 1 >>> import MySQLdb
 2
 3 >>> test_conn=MySQLdb.Connect(host=‘127.0.0.1‘,port=3306,user=‘yc‘,passwd=‘Yc_123456‘,db=‘st‘,charset=‘utf8‘)
 4
 5 >>> sql = "select * from student"
 6
 7 >>> test_cursor=test_conn.cursor()
 8
 9 >>> test_cursor.execute(sql)
10
11 6L
12
13 >>> test_cursor
14
15 <MySQLdb.cursors.Cursor object at 0x0000000002EB7710>
16
17 >>> test_rs=test_cursor.fetchall()
18
19 >>> for row in test_rs:
20
21 ...    print row
22
23 ...
24
25 (u‘201215121‘, u‘\u674e\u52c7‘, u‘\u7537‘, 21, u‘CS‘)
26
27 (u‘201215122‘, u‘\u5218\u6668‘, u‘\u5973‘, 23, u‘CS‘)
28
29 (u‘201215123‘, u‘\u738b\u654f‘, u‘\u5973‘, 19, u‘MA‘)
30
31 (u‘201215125‘, u‘\u5f20\u7acb‘, u‘\u7537‘, 20, u‘IS‘)
32
33 (u‘201215126‘, u‘\u5f20\u6210\u6c11‘, u‘\u7537‘, 19, u‘CS‘)
34
35 (u‘201215128‘, u‘\u9648\u51ac‘, u‘\u7537‘, 19, u‘IS‘)
36
37 >>> for row in test_cursor:
38
39 ...    print row
40
41 ...
42
43 (u‘201215121‘, u‘\u674e\u52c7‘, u‘\u7537‘, 21, u‘CS‘)
44
45 (u‘201215122‘, u‘\u5218\u6668‘, u‘\u5973‘, 23, u‘CS‘)
46
47 (u‘201215123‘, u‘\u738b\u654f‘, u‘\u5973‘, 19, u‘MA‘)
48
49 (u‘201215125‘, u‘\u5f20\u7acb‘, u‘\u7537‘, 20, u‘IS‘)
50
51 (u‘201215126‘, u‘\u5f20\u6210\u6c11‘, u‘\u7537‘, 19, u‘CS‘)
52
53 (u‘201215128‘, u‘\u9648\u51ac‘, u‘\u7537‘, 19, u‘IS‘)
54
55 >>> test_cursor.fetchall()
56
57 ()
58
59 >>> test_cursor.rowcount
60
61 6L
62
63 >>> dir(test_cursor)
64
65 [‘DataError‘, ‘DatabaseError‘, ‘Error‘, ‘IntegrityError‘, ‘InterfaceError‘, ‘InternalError‘, ‘MySQLError‘, ‘NotSupportedError‘, ‘OperationalError‘, ‘ProgrammingError‘, ‘Warning‘, ‘__class__‘, ‘__del__‘, ‘__delattr__‘, ‘__dict__‘, ‘__doc__‘, ‘__format__‘, ‘__getattribute__‘, ‘__hash__‘, ‘__init__‘, ‘__iter__‘, ‘__module__‘, ‘__new__‘, ‘__reduce__‘, ‘__reduce_ex__‘, ‘__repr__‘, ‘__setattr__‘, ‘__sizeof__‘, ‘__str__‘, ‘__subclasshook__‘, ‘__weakref__‘, ‘_check_executed‘, ‘_defer_warnings‘, ‘_do_get_result‘, ‘_do_query‘, ‘_executed‘, ‘_fetch_row‘, ‘_fetch_type‘, ‘_get_db‘, ‘_get_result‘, ‘_info‘, ‘_last_executed‘, ‘_post_get_result‘, ‘_query‘, ‘_result‘, ‘_rows‘, ‘_warning_check‘, ‘_warnings‘, ‘arraysize‘, ‘callproc‘, ‘close‘, ‘connection‘, ‘description‘, ‘description_flags‘, ‘errorhandler‘, ‘execute‘, ‘executemany‘, ‘fetchall‘, ‘fetchmany‘, ‘fetchone‘, ‘lastrowid‘, ‘messages‘, ‘nextset‘, ‘rowcount‘, ‘rownumber‘, ‘scroll‘, ‘setinputsizes‘, ‘setoutputsizes‘]
66
67 >>> test_cursor.rownumber
68
69 6
70
71 >>> test_cursor.rownumber=0
72
73 >>> test_cursor.fetchone()
74
75 (u‘201215121‘, u‘\u674e\u52c7‘, u‘\u7537‘, 21, u‘CS‘)
76
77 >>> test_cursor.close()
78
79 >>> test_conn.close()

Python之Select查询简单举例

Python之insert/update/delete更新操作&事务使用

理念

Python之事务的使用

1.关闭自动提交:设置connection.autocommit(False)

2.正常提交事务:connection.commit()

3.异常回滚事务:connection.rollback()

实例

 1 >>> import MySQLdb
 2
 3 >>> test_conn=MySQLdb.Connect(host=‘127.0.0.1‘,port=3306,user=‘yc‘,passwd=‘Yc_123456‘,db=‘st‘,charset=‘utf8‘)
 4
 5 >>> insert_sql="insert into student(Sno,Sname,Ssex,Sage,Sdept) values(201215130,‘王晓东‘,‘男‘,18,‘CS‘)"
 6
 7 >>> update_sql="update student set Ssex=‘女‘ where Sno=201215130"
 8
 9 >>> test_conn.autocommit(False)
10
11 >>> test_cursor=test_conn.cursor()
12
13 >>> try:
14
15 ...    test_cursor.execute(insert_sql)
16
17 ...    test_cursor.execute(update_sql)
18
19 ...    test_conn.commit()
20
21 ... except Exception as e:
22
23 ...    print e
24
25 ...    test_conn.rollback()
26
27 ...
28
29 1L
30
31 1L
32
33 >>> test_cursor.close()
34
35 >>> test_conn.close()

Python之更新语句简单举例

注:

(1062, "Duplicate entry ‘201215130‘ for key ‘PRIMARY‘")

明明数据库中没有,但是爆了这个错,是因为crusor中已经有了‘201215130‘这个ID的记录,所以需要初始化cursor实例(先close(),在重新赋值)

实例--银行转帐

create table account (

acctid INT(11) PRIMARY KEY COMMENT ‘账户ID‘,

money NUMERIC(11,2) DEFAULT 0.00 COMMENT ‘余额‘

) ENGINE = INNODB DEFAULT CHARSET = utf8;

引擎选择--INNODB支持事务,MyISAM不支持事务

  1 # -*- coding:utf-8 -*-
  2
  3 # 代码编写思路:先抽象后具体;先写框架,后写实现。
  4 # 1.获得源帐号、目标账号、转账金额
  5 # 2.连接数据库
  6 # 3.开始事务
  7 # 4.提交或回滚
  8 # *********************
  9 # 下列动作可封装到一个类中
 10 #   3.1检查源帐号是否可用
 11 #   3.2检查目标账号是否可用
 12 #   3.3检查源帐号是否有足够的钱
 13 #   3.4源帐号扣款
 14 #   3.5目标账号加钱
 15
 16
 17 import MySQLdb
 18
 19 # parameters define here
 20 src_id = input(‘input src account id >‘)
 21 des_id = input(‘input des account id >‘)
 22 money = input(‘money number >‘)
 23
 24 class MyException(Exception):
 25     def __init__(self,message):
 26         Exception.__init__(self)
 27         self.message=message
 28
 29 class TransferMoney(object):
 30     def __init__(self,db_connect_instance):
 31         self.__db_conn=db_connect_instance
 32
 33     def check_account_available(self,account_id):
 34         print "检查账户%s是否可用..." % account_id
 35         __sql="select * from account where acctid=%s" % account_id
 36         __curosr = self.__db_conn.cursor()
 37         __curosr.execute(__sql)
 38         #print "rowcount-->%s" % __curosr.rowcount
 39         if __curosr.rowcount!=1:
 40             print "账户%s不可用"% account_id
 41             raise MyException("账户%s不可用"% account_id)
 42         print "账户%s可用" % account_id
 43         __curosr.close()
 44
 45     def check_enough_money(self,account_id, money):
 46         print "检查账户%s余额是否足够..." % account_id
 47         __sql="select * from account where acctid=%s and money>=%s" % (account_id, money)
 48         __curosr = self.__db_conn.cursor()
 49         __curosr.execute(__sql)
 50         #print "rowcount-->%s" % __curosr.rowcount
 51         if __curosr.rowcount!=1:
 52             print "账户%s余额不足"% account_id
 53             raise MyException("账户%s余额不足"% account_id)
 54         print "账户%s余额充足" % account_id
 55         __curosr.close()
 56
 57     def reduce_money(self,account_id, money):
 58         print "账户%s开始扣款..." % account_id
 59         __sql="update account set money=money-%s where acctid=%s" % (money, account_id)
 60         __curosr = self.__db_conn.cursor()
 61         __curosr.execute(__sql)
 62         #print "rowcount-->%s" % __curosr.rowcount
 63         if __curosr.rowcount!=1:
 64             print "账户%s扣款失败"% account_id
 65             raise MyException("账户%s扣款失败"% account_id)
 66         print "账户%s扣款成功" % account_id
 67         __curosr.close()
 68
 69     def add_money(self,account_id, money):
 70         print "账户%s开始加钱..." % account_id
 71         __sql="update account set money=money+%s where acctid=%s" % (money, account_id)
 72         __curosr = self.__db_conn.cursor()
 73         __curosr.execute(__sql)
 74         #print "rowcount-->%s" % __curosr.rowcount
 75         if __curosr.rowcount!=1:
 76             print "账户%s加钱失败"% account_id
 77             raise MyException("账户%s加钱失败"% account_id)
 78         print "账户%s加钱成功" % account_id
 79         __curosr.close()
 80
 81 def main():
 82     st_conn = MySQLdb.Connect(host=‘127.0.0.1‘,port=3306,user=‘yc‘,passwd=‘Yc_123456‘,db=‘st‘,charset=‘utf8‘)
 83
 84     transfer_money = TransferMoney(st_conn)
 85
 86     try:
 87         transfer_money.check_account_available(src_id)
 88         transfer_money.check_account_available(des_id)
 89         transfer_money.check_enough_money(src_id,money)
 90         transfer_money.reduce_money(src_id,money)
 91         transfer_money.add_money(des_id,money)
 92         st_conn.commit()
 93         print "从帐号%s转%s元到帐号%s成功!!!" % (src_id, money, des_id)
 94     except Exception as e:
 95         print "从帐号%s转%s元到帐号%s失败!!!" % (src_id, money, des_id)
 96         print e.message
 97         st_conn.rollback()
 98
 99     st_conn.close()
100
101 main()

Python代码实现银行转帐

时间: 2024-10-01 23:53:18

Python 数据库操作 -- Mysql 数据库的相关文章

python 之操作mysql 数据库实例

对于python操作mysql 数据库,具体的步骤应为: 1. 连接上mysql host 端口号 数据库 账号 密码2. 建立游标3. 执行sql(注意,如果是update,insert,delete 需要进行提交才能生效.)4. 获取结果5. 关闭连接.关闭游标 一.默认获取的结果是元祖 1 conn = pymysql.connect(host='localhost',user='root',passwd='123456',port=3306,db='sakila',charset='ut

Python之 操作 MySQL 数据库

什么是MySQLdb? MySQLdb 是用于Python链接Mysql数据库的接口,它实现了 Python 数据库 API 规范 V2.0,基于 MySQL C API 上建立的. 安装 Python MySQLdb 模块 linux版本:(配置好yum源) pip install MySQL-pythonyum install MySQL-python 如何加载MySQLdb? 为了用DB-API编写MySQL脚本,必须确保已经安装了MySQL.复制以下代码,并执行: #!/usr/bin/

Python数据库操作 MySQL数据库与数据表操作#学习猿地

# MySQL数据库与数据表操作 + 数据库的操作 + 数据库创建 + 数据库删除 + 数据表的操作 + 数据表的创建 + 数据表的修改 (表结构) + 数据表的删除 ### 数据库的操作 #### 1.数据库的创建 ```mysql # 链接mysql数据库后,进入mysql后可以操作数据 # 1. 创建库 create database if not exists tlxy default charset=utf8: -- 1. 数据库 tlxy 如果不存在则创建数据库,存在则不创建 --

Python数据库操作 Mysql数据库表引擎与字符集#学习猿地

# Mysql数据库表引擎与字符集 ![](./imgs/752951346A5F4E7EBDE362FA97107707.png) ### 1.服务器处理客户端请求 其实不论客户端进程和服务器进程是采用哪种方式进行通信,最后实现的效果都是:**客户端进程向服务器进程发送一段文本(MySQL语句),服务器进程处理后再向客户端进程发送一段文本(处理结果).**那服务器进程对客户端进程发送的请求做了什么处理,才能产生最后的处理结果呢?客户端可以向服务器发送增删改查各类请求,我们这里以比较复杂的查询请

Python数据库操作 Mysql数据库导入导出和授权#学习猿地

# Mysql数据库导入导出和授权 ### 数据导出 #### 1.数据库数据导出 ```shell # 不要进入mysql,然后输入以下命令 导出某个库中的数据 mysqldump -u root -p tlxy > ~/Desktop/code/tlxy.sql ``` 导出一个库中所有数据,会形成一个建表和添加语句组成的sql文件 之后可以用这个sql文件到别的库,或着本机中创建或回复这些数据 #### 2.将数据库中的表导出 ```shell # 不要进入mysql,然后输入以下命令 导

Python之操作MySQL数据库

一.MySQL数据库启动与登陆 安装这里就不细说了.安装完成之后记得将安装路径配置进环境变量.然后进入到命令行下启动数据库.注:MySQL数据库安装完成后默认的是开启状态. 开启MySQL数据库,注:此处输入的服务名是安装时候设置的服务名称,MySQL5.7的版本默认的服务名称是MySQL57 关闭MySQL数据库服务 登陆MySQL数据库 二.建表 显示数据库 show databases; 创建数据库 create database lianxi DEFAULT character set

python 安装操作 MySQL 数据库.

以ubuntu和mysql为例 检查自己的机器上面有没有安装数据库 1 [email protected]:~$ sudo service mysql start 2 [sudo] xpower 的密码: 尝试输入命令打开 MySQL 不同的版本会有不同的效果 , 我的什么反馈也没有这就说明已经安装并且启动成功了 ( 没有消息就是最好的消息 ) 有的 ubuntu 会有反馈 , 自己看反馈内容 . 很容易判断 . 安装MySQL(安装过程中可能需要填写一点东西 . 建议填写一下 . ) 1 [e

python 连接操作mysql数据库

开发数据库程序流程: 1.创建connection对象,获取cursor 2.使用cursor执行SQL 3.使用cursor获取数据.判断执行状态 4.提交事务 或者 回滚事务 import: 数据库连接对象:connection 数据库交互对象:cursor #sql查询语句 sql='select * from user ' #sql语句执行 cursor.execute(sql) #获取返回数据总条数 rs=cursor.rowcount print rs #获取返回的第一条数据,此时游

使用pandas操作MySQL数据库

转载(有添加.修改)作者:但盼风雨来_jc链接:https://www.jianshu.com/p/238a13995b2b來源:简书著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 本次分享将介绍如何在Python中使用Pandas库实现MySQL数据库的读写.首先我们需要了解点ORM方面的知识 ORM技术   对象关系映射技术,即ORM(Object-Relational Mapping)技术,指的是把关系数据库的表结构映射到对象上,通过使用描述对象和数据库之间映射的元数