您的当前位置:首页Python学习笔记 - MySql的使用

Python学习笔记 - MySql的使用

2023-11-12 来源:哗拓教育

 

三、范例

MySql脚本

-- ------------------------------ Table structure for account-- ----------------------------DROP TABLE IF EXISTS `account`;CREATE TABLE `account` ( `acctid` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `money` decimal(50, 0) NULL DEFAULT NULL) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;-- ------------------------------ Records of account-- ----------------------------INSERT INTO `account` VALUES (‘1‘, ‘张三‘, 50);INSERT INTO `account` VALUES (‘2‘, ‘李四‘, 150);

 

Python程序

# coding:utf8import sysimport pymysqlclass 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 print("check_acct_available:" + sql) cursor.execute(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) print("has_enough_money:" + sql) cursor.execute(sql) rs = cursor.fetchall() if len(rs) != 1: raise Exception("帐号%s没有足够的金额" % acctid) finally: cursor.close() def reduce_money(self, acctid, money): cursor = self.conn.cursor() try: sql = "update account set money=money-%s where acctid=‘%s‘ " % ( money, acctid) print("reduce_money:" + sql) cursor.execute(sql) if cursor.rowcount != 1: raise Exception("帐号%s减款失败" % acctid) finally: cursor.close() def add_money(self, acctid, money): cursor = self.conn.cursor() try: sql = "update account set money=money+%s where acctid=‘%s‘ " % ( money, acctid) print("add_money:" + sql) cursor.execute(sql) 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, money) self.add_money(target_acctid, money) self.conn.commit() except Exception as e: self.conn.rollback() print("transfer出现异常:" + str(e)) raise edef main(): source_acctid = sys.argv[1] print("转出帐号=" + source_acctid) target_acctid = sys.argv[2] print("转入帐号=" + target_acctid) money = sys.argv[3] print("金额=" + money) # 连接数据库 conn = pymysql.Connect( host=‘localhost‘, port=3306, user=‘root‘, passwd=‘root‘, db=‘OtkDb‘, charset=‘utf8‘) tr_money = TransferMoney(conn) try: tr_money.transfer(source_acctid, target_acctid, money) except Exception as e: print("main出现异常:" + str(e)) finally: conn.close()if __name__ == ‘__main__‘: main()

 四、运行效果

PS H:webPython> & python h:webPython1.MySqldb.py 1 2 50转出帐号=1转入帐号=2金额=50check_acct_available:select * from account where acctid=‘1‘check_acct_available:select * from account where acctid=‘2‘has_enough_money:select * from account where acctid=‘1‘ and money>50reduce_money:update account set money=money-50 where acctid=‘1‘add_money:update account set money=money+50 where acctid=‘2‘PS H:webPython> & python h:webPython1.MySqldb.py 1 2 50转出帐号=1转入帐号=2金额=50check_acct_available:select * from account where acctid=‘1‘check_acct_available:select * from account where acctid=‘2‘has_enough_money:select * from account where acctid=‘1‘ and money>50transfer出现异常:帐号1没有足够的金额main出现异常:帐号1没有足够的金额

 

参考:

http://www.cnblogs.com/woider/p/5926744.html

 

Python学习笔记 - MySql的使用

标签:cursor   参考   python程序   密码   执行   支持   影响   ini   close   

小编还为您整理了以下内容,可能对您也有帮助:

Python之MySQL操作

MySQL 是目前使用最广泛的数据库之一,它有着良好的性能,能够跨平台,支持分布式,能够承受高并发。下载地址: MySQL :: Download MySQL Community Server 安装参考: 图解MySQL5.7.20免安装版配置方法-百度经验 (.com)

Python 大致有如下 5 种方式操作 MySQL。

先使用如下建表语句创建一张简单的数据库表。

2.1 mysqlclient

执行 pip install mysqlclient 进行安装,看一下具体操作。

新增

查询

cursor 查看方法

修改

删除

2.2 PyMySQL

执行 pip install pymysql 进行安装,使用方式与 mysqlclient 基本类似。

2.3 peewee

执行 pip install peewee 进行安装,看一下具体操作。

定义映射类

新增

查询

修改

删除

2.4 SQLAlchemy

执行 pip install sqlalchemy 进行安装,看一下具体操作。

定义映射类

新增

查询

修改

删除

Python学习日记

用Python连接MySQL的几种方式详解_python

这篇文章主要介绍了用 Python 连接 MySQL 的几种方式,大家可以根据实际情况选择合理的连接方式,需要的朋友可以参考下

尽管很多 NoSQL 数据库近几年大放异彩,但是像 MySQL 这样的关系型数据库依然是互联网的主流数据库之一,每个学 Python 的都有必要学好一门数据库,不管你是做数据分析,还是网络爬虫,Web 开发、亦或是机器学习,你都离不开要和数据库打交道,而 MySQL 又是最流行的一种数据库,这篇文章介绍 Python 操作 MySQL 的几种方式,你可以在实际开发过程中根据实际情况合理选择。

1、MySQL-python

MySQL-python 又叫 MySQLdb,是 Python 连接 MySQL 最流行的一个驱动,很多框架都也是基于此库进行开发,遗憾的是它只支持 Python2.x,而且安装的时候有很多前置条件,因为它是基于C开发的库,在 Windows 平台安装非常不友好,经常出现失败的情况,现在基本不推荐使用,取代的是它的衍生版本。

# 前置条件

sudo apt-get install python-dev libmysqlclient-dev # Ubuntu

sudo yum install python-devel mysql-devel # Red Hat / CentOS

# 安装

pip install MySQL-pythonWindows 直接通过下载 exe 文件安装,公众号回复「win」获取下载链接

#!/usr/bin/python

import MySQLdb

db = MySQLdb.connect(

host="localhost", # 主机名

user="john", # 用户名

passwd="megajonhy", # 密码

db="jonhydb") # 数据库名称

# 查询前,必须先获取游标

cur = db.cursor()

# 执行的都是原生SQL语句

cur.execute("SELECT * FROM YOUR_TABLE_NAME")

for row in cur.fetchall():

print(row[0])

db.close()2、mysqlclient

由于 MySQL-python 年久失修,后来出现了它的 Fork 版本 mysqlclient,完全兼容 MySQLdb,同时支持 Python3.x,是 Django ORM的依赖工具,如果你想使用原生 SQL 来操作数据库,那么推荐此驱动。安装方式和 MySQLdb 是一样的,Windows 可以在 https://www.lfd.uci.e/~gohlke/pythonlibs/#mysqlclient 网站找到 对应版本的 whl 包下载安装。

# Windows安装

pip install some-package.whl

# linux 前置条件

sudo apt-get install python3-dev # debian / Ubuntu

sudo yum install python3-devel # Red Hat / CentOS

brew install mysql-connector-c # macOS (Homebrew)

pip install mysqlclient3、PyMySQL

PyMySQL 是纯 Python 实现的驱动,速度上比不上 MySQLdb,最大的特点可能就是它的安装方式没那么繁琐,同时也兼容 MySQL-python

pip install PyMySQL

# 为了兼容mysqldb,只需要加入

pymysql.install_as_MySQLdb()一个例子

import pymysql

conn = pymysql.connect(host='127.0.0.1', user='root', passwd="xxx", db='mysql')

cur = conn.cursor()

cur.execute("SELECT Host,User FROM user")

for r in cur:

print(r)

cur.close()

conn.close()4、peewee

写原生 SQL 的过程非常繁琐,代码重复,没有面向对象思维,继而诞生了很多封装 wrapper 包和 ORM 框架,ORM 是 Python 对象与数据库关系表的一种映射关系,有了 ORM 你不再需要写 SQL 语句。提高了写代码的速度,同时兼容多种数据库系统,如sqlite, mysql、postgresql,付出的代价可能就是性能上的一些损失。如果你对 Django 自带的 ORM 熟悉的话,那么 peewee的学习成本几乎为零。它是 Python 中是最流行的 ORM 框架。

pip install peewee

一个例子

import peewee

from peewee import *

db = MySQLDatabase('jonhydb', user='john', passwd='megajonhy')

class Book(peewee.Model):

author = peewee.CharField()

title = peewee.TextField()

class Meta:

database = db

Book.create_table()

book = Book(author="me", title='Peewee is cool')

book.save()

for book in Book.filter(author="me"):

print(book.title)官方文档:http://docs.peewee-orm.com/en/latest/peewee/installation.html

5、SQLAlchemy

如果想找一种既支持原生 SQL,又支持 ORM 的工具,那么 SQLAlchemy 是最好的选择,它非常接近 Java 中的 Hibernate 框架。

from sqlalchemy import create_engine

from sqlalchemy.orm import sessionmaker

from sqlalchemy_declarative import Address, Base, Person

class Address(Base):

__tablename__ = 'address'

id = Column(Integer, primary_key=True)

street_name = Column(String(250))

engine = create_engine('sqlite:///sqlalchemy_example.db')

Base.metadata.bind = engine

DBSession = sessionmaker(bind=engine)

session = DBSession()

# Insert a Person in the person table

new_person = Person(name='new person')

session.add(new_person)

session.commit()现在差不多搞明白了这几种数据库驱动的优劣,接下来你就可以选择其中的一个进行系统的学习再把它应用到项目中去了,祝你学习开心,不懂的可以咨询我哈。

如何使用python连接mysql数据库

什么是 PyMySQL?

PyMySQL是在Python3.x 版本中用于连接 MySQL 数据库的一个库,Python2中则使用mysqldb。

PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户端库。(推荐学习:Python视频教程)

PyMySQL 安装

在使用 PyMySQL 之前,我们需要确保 PyMySQL 已安装。

PyMySQL 下载地址:https://github.com/PyMySQL/PyMySQL。

如果还未安装,我们可以使用以下命令安装最新版的 PyMySQL:

$ pip3 install PyMySQL

连接数据库前,请先确认以下事项:

您已经创建了数据库 TESTDB.

在TESTDB数据库中您已经创建了表 EMPLOYEE

EMPLOYEE表字段为 FIRST_NAME, LAST_NAME, AGE, SEX 和 INCOME。

连接数据库TESTDB使用的用户名为 "testuser" ,密码为 "test123",你可以可以自己设定或者直接使用root用户名及其密码,Mysql数据库用户授权请使用Grant命令。

在你的机子上已经安装了 Python MySQLdb 模块。

以下实例链接 Mysql 的 TESTDB 数据库:

#!/usr/bin/python3import pymysql# 打开数据库连接db = pymysql.connect("localhost","testuser","test123","TESTDB" )# 使用 cursor() 方法创建一个游标对象 cursorcursor = db.cursor()# 使用 execute() 方法执行 SQL 查询 cursor.execute("SELECT VERSION()")# 使用 fetchone() 方法获取单条数据.data = cursor.fetchone()print ("Database version : %s " % data)# 关闭数据库连接db.close()

更多Python相关技术文章,请访问Python教程栏目进行学习!

如何使用python连接mysql数据库

什么是 PyMySQL?

PyMySQL是在Python3.x 版本中用于连接 MySQL 数据库的一个库,Python2中则使用mysqldb。

PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户端库。(推荐学习:Python视频教程)

PyMySQL 安装

在使用 PyMySQL 之前,我们需要确保 PyMySQL 已安装。

PyMySQL 下载地址:https://github.com/PyMySQL/PyMySQL。

如果还未安装,我们可以使用以下命令安装最新版的 PyMySQL:

$ pip3 install PyMySQL

连接数据库前,请先确认以下事项:

您已经创建了数据库 TESTDB.

在TESTDB数据库中您已经创建了表 EMPLOYEE

EMPLOYEE表字段为 FIRST_NAME, LAST_NAME, AGE, SEX 和 INCOME。

连接数据库TESTDB使用的用户名为 "testuser" ,密码为 "test123",你可以可以自己设定或者直接使用root用户名及其密码,Mysql数据库用户授权请使用Grant命令。

在你的机子上已经安装了 Python MySQLdb 模块。

以下实例链接 Mysql 的 TESTDB 数据库:

#!/usr/bin/python3import pymysql# 打开数据库连接db = pymysql.connect("localhost","testuser","test123","TESTDB" )# 使用 cursor() 方法创建一个游标对象 cursorcursor = db.cursor()# 使用 execute() 方法执行 SQL 查询 cursor.execute("SELECT VERSION()")# 使用 fetchone() 方法获取单条数据.data = cursor.fetchone()print ("Database version : %s " % data)# 关闭数据库连接db.close()

更多Python相关技术文章,请访问Python教程栏目进行学习!

Python教程:[25]远程操作Mysql数据库

使用python操作mysql是一件经常要用到的技术,比如我最喜欢用python管理我的网站,我从其他网站采集的内容,经过伪原创,然后上传到自己的网站,下面我来分享一下最基本的使用python中的mysqldb模块操作数据库mysql的方法。

首先要引入模块,下面这个模块是必须要引入的

接着,我要建立连接,我们看到各个参数已经在后面解释,我要说的是,大部分课本上将host都用的localhost作为本地主机的地址,那么我们在操作远程数据库的时候,我们就需要用到远程主机的Ip地址了。

我们通常建立连接的时候,不要直接使用connect方法,而是使用try语句,这样一旦连接错误,不至于你的程序错误,还可以返回错误代码。

创建好连接以后,我们要创建一个指针,我们就是使用指针中的方法来操作数据库的。

我们写一句sql,你可能没学过sql,先不着急,以后我们会介绍sql的基本用法,其实sql是很简单的。

接着我们使用execute方法来执行sql语句,同样将其放到try语句中,防止发生错误。

最后,我们提交一下数据,我用的是dede网站管理系统,所以可以向dede_ask表中提交数据,我们用到了insert into来插入数据。

python如何使用pymysql连接数据库封装类

1、python安装目录设定为d:/python34
2、pymysql安装方法为:解压下载的文件,在cmd中运行: python setup.py install。
检验安装安装是否成功的方法:import pymysql 。 如果不报错 说明安装成功。
3、mysql安装目录为D:/phpStudy/MySQL。为避免更多配置问题,可在启动phpstudy后,将其设为系统服务
4、基本操作:
(1)导入pymysql: import pymysql
(2)连接数据库:
conn=pymysql.connect(host='localhost',user='root',passwd='root',db='ere',charset='utf8')
务必注意各等号前面的内容!charset参数可避免中文乱码
(3)获取操作游标:cur=conn.cursor()
(4)执行sql语句,插入记录:sta=cur.execute("insert 语句") 执行成功后sta值为1。更新、删除语句与此类似。
(5)执行sql语句,查询记录:cur.execute("select语句") 执行成功后cur变量中保存了查询结果记录集,然后再用循环打印结果:
for each in cur:
print(each[1].decode('utf-8')) # each[1] 表示当前游标所在行的的第2列值,如果是中文则需要处理编码

python如何使用pymysql连接数据库封装类

1、python安装目录设定为d:/python34
2、pymysql安装方法为:解压下载的文件,在cmd中运行: python setup.py install。
检验安装安装是否成功的方法:import pymysql 。 如果不报错 说明安装成功。
3、mysql安装目录为D:/phpStudy/MySQL。为避免更多配置问题,可在启动phpstudy后,将其设为系统服务
4、基本操作:
(1)导入pymysql: import pymysql
(2)连接数据库:
conn=pymysql.connect(host='localhost',user='root',passwd='root',db='ere',charset='utf8')
务必注意各等号前面的内容!charset参数可避免中文乱码
(3)获取操作游标:cur=conn.cursor()
(4)执行sql语句,插入记录:sta=cur.execute("insert 语句") 执行成功后sta值为1。更新、删除语句与此类似。
(5)执行sql语句,查询记录:cur.execute("select语句") 执行成功后cur变量中保存了查询结果记录集,然后再用循环打印结果:
for each in cur:
print(each[1].decode('utf-8')) # each[1] 表示当前游标所在行的的第2列值,如果是中文则需要处理编码

Python连接mysql数据库及python使用mysqldb连接数据库教程

做python的时候需要用到数据库,于是自己重新整理了一下数据库的知识,并且熟悉了python中MysqlDB模块的功能和函数等接口,现在系统地来总结一下吧:

首先你要做的还是下载相应的模块并且安装啦,下载地址自己搜,网上有很多,安装的话也很好办,安装之后python的安装目录下的Lib文件夹下的site-packages文件夹下的MySQLdb文件夹,这之中存放的便是该模块的定义。准备工作做好之后我们需要在源码中import MySQLdb

数据库的连接:

模块引入之后我们就需要和数据库进行连接了,实例代码如下:

db = MySQLdb.connect("localhost","root","123456","myciti" )

这三个关键参数的含义一目了然:第一个为服务器的地址,第二个为用户名,第三个为dbms密码,第四个为要访问的数据库,其实该connect函数的参数不止这些,不过由于其有默认值而且大多数情况下不用修改,因而省略了。这里做如下列表:

host,连接的数据库服务器主机名,默认为本地主机(localhost)。

user,连接数据库的用户名,默认为当前用户。

passwd,连接密码,没有默认值。

db,连接的数据库名,没有默认值。

conv,将文字映射到Python类型的字典。默认为MySQLdb.converters.conversions

cursorclass,cursor()使用的种类,默认值为MySQLdb.cursors.Cursor。

compress,启用协议压缩功能。

named_pipe,在windows中,与一个命名管道相连接。

init_command,一旦连接建立,就为数据库服务器指定一条语句来运行。

read_default_file,使用指定的MySQL配置文件。

read_default_group,读取的默认组。

unix_socket,在unix中,连接使用的套接字,默认使用TCP。

port,指定数据库服务器的连接端口,默认是3306

大家可能会注意到源码中没有用到端口号,这是因为MySQLdb的connect函数的该参数的默认值便是3306,如果你在安装mysql的时候修改了数据库的端口号,那么你就需要在源码中加上该参数的修改值了。

一,安装mysql

如果是windows 用户,mysql 的安装非常简单,直接下载安装文件,双击安装文件一步一步进行操作即可。

Linux 下的安装可能会更加简单,除了下载安装包进行安装外,一般的linux 仓库中都会有mysql ,我们只需要通过一个命令就可以下载安装:

Ubuntu/deepin

sudo apt-get install mysql-server

Sudo apt-get install mysql-client

centOS/redhat

yum install mysql

二,安装MySQL-python

要想使python可以操作mysql 就需要MySQL-python驱动,它是python 操作mysql必不可少的模块。

下载地址:https://pypi.python.org/pypi/MySQL-python/

下载MySQL-python-1.2.5.zip 文件之后直接解压。进入MySQL-python-1.2.5目录:

python setup.py install

三,测试

测试非常简单,检查MySQLdb 模块是否可以正常导入。

fnngj@fnngj-H24X:~/pyse$ python

Python 2.7.4 (default, Sep 26 2013, 03:20:56)

[GCC 4.7.3] on linux2

Type "help", "copyright", "credits" or "license" for more information.

import MySQLdb

没有报错提示MySQLdb模块找不到,说明安装OK ,下面开始使用python 操作数据库之前,我们有必要来回顾一下mysql的基本操作:

四,mysql 的基本操作

$ mysql -u root -p (有密码时)

$ mysql -u root (无密码时)

mysql show databases; // 查看当前所有的数据库

+--------------------+

| Database |

+--------------------+

| information_schema |

| csvt |

| csvt04 |

| mysql |

| performance_schema |

| test |

+--------------------+

6 rows in set (0.18 sec)

mysql use test; //作用与test数据库

Database changed

mysql show tables; //查看test库下面的表

Empty set (0.00 sec)

//创建user表,name 和password 两个字段

mysql CREATE TABLE user (name VARCHAR(20),password VARCHAR(20)); Query OK, 0 rows affected (0.27 sec)

//向user表内插入若干条数据

mysql insert into user values('Tom','1321');Query OK, 1 row affected (0.05 sec)

mysql insert into user values('Alen','7875');Query OK, 1 row affected (0.08 sec)

mysql insert into user values('Jack','7455');Query OK, 1 row affected (0.04 sec)

//查看user表的数据

mysql select * from user;+------+----------+

| name | password |

+------+----------+

| Tom | 1321 |

| Alen | 7875 |

| Jack | 7455 |

+------+----------+

3 rows in set (0.01 sec)

//删除name 等于Jack的数据

mysql delete from user where name = 'Jack';Query OK, 1 rows affected (0.06 sec)

//修改name等于Alen 的password 为 1111

mysql update user set password='1111' where name = 'Alen';Query OK, 1 row affected (0.05 sec)

Rows matched: 1 Changed: 1 Warnings: 0

//查看表内容

mysql select * from user;+--------+----------+

| name | password |

+--------+----------+

| Tom | 1321 |

| Alen | 1111 |

+--------+----------+

3 rows in set (0.00 sec)

五,python 操作mysql数据库基础

#coding=utf-8import MySQLdb

conn= MySQLdb.connect(

host='localhost',

port = 3306,

user='root',

passwd='123456',

db ='test',

)

cur = conn.cursor()#创建数据表#cur.execute("create table student(id int ,name varchar(20),class varchar(30),age varchar(10))")#插入一条数据#cur.execute("insert into student values('2','Tom','3 year 2 class','9')")#修改查询条件的数据#cur.execute("update student set class='3 year 1 class' where name = 'Tom'")#删除查询条件的数据#cur.execute("delete from student where age='9'")cur.close()

conn.commit()

conn.close()

conn = MySQLdb.connect(host='localhost',port = 3306,user='root', passwd='123456',db ='test',)

Connect() 方法用于创建数据库的连接,里面可以指定参数:用户名,密码,主机等信息。

这只是连接到了数据库,要想操作数据库需要创建游标。

cur = conn.cursor()

通过获取到的数据库连接conn下的cursor()方法来创建游标。

cur.execute("create table student(id int ,name varchar(20),class varchar(30),age varchar(10))")

通过游标cur 操作execute()方法可以写入纯sql语句。通过execute()方法中写如sql语句来对数据进行操作。

cur.close()

cur.close() 关闭游标

conn.commit()

conn.commit()方法在提交事物,在向数据库插入一条数据时必须要有这个方法,否则数据不会被真正的插入。

conn.close()

Conn.close()关闭数据库连接

六,插入数据

通过上面execute()方法中写入纯的sql语句来插入数据并不方便。如:

cur.execute("insert into student values('2','Tom','3 year 2 class','9')")

我要想插入新的数据,必须要对这条语句中的值做修改。我们可以做如下修改:

#coding=utf-8import MySQLdb

conn= MySQLdb.connect(

host='localhost',

port = 3306,

user='root',

passwd='123456',

db ='test',

)

cur = conn.cursor()#插入一条数据sqli="insert into student values(%s,%s,%s,%s)"cur.execute(sqli,('3','Huhu','2 year 1 class','7'))

cur.close()

conn.commit()

conn.close()

假如要一次向数据表中插入多条值呢?

#coding=utf-8import MySQLdb

conn= MySQLdb.connect(

host='localhost',

port = 3306,

user='root',

passwd='123456',

db ='test',

)

cur = conn.cursor()#一次插入多条记录sqli="insert into student values(%s,%s,%s,%s)"cur.executemany(sqli,[

('3','Tom','1 year 1 class','6'),

('3','Jack','2 year 1 class','7'),

('3','Yaheng','2 year 2 class','7'),

])

cur.close()

conn.commit()

conn.close()

executemany()方法可以一次插入多条值,执行单挑sql语句,但是重复执行参数列表里的参数,返回值为受影响的行数。

七,查询数据

也许你已经尝试了在python中通过

cur.execute("select * from student")

来查询数据表中的数据,但它并没有把表中的数据打印出来,有些失望。

来看看这条语句获得的是什么

aa=cur.execute("select * from student")

print aa

5.它获得的只是我们的表中有多少条数据。那怎样才能获得表中的数据呢?进入python shell

import MySQLdb conn = MySQLdb.connect(host='localhost',port = 3306,user='root', passwd='123456',db ='test',) cur = conn.cursor() cur.execute("select * from student")5L

cur.fetchone()

(1L, 'Alen', '1 year 2 class', '6') cur.fetchone()

(3L, 'Huhu', '2 year 1 class', '7') cur.fetchone()

(3L, 'Tom', '1 year 1 class', '6')

...cur.scroll(0,'absolute')

fetchone()方法可以帮助我们获得表中的数据,可是每次执行cur.fetchone() 获得的数据都不一样,换句话说我没执行一次,游标会从表中的第一条数据移动到下一条数据的位置,所以,我再次执行的时候得到的是第二条数据。

scroll(0,'absolute') 方法可以将游标定位到表中的第一条数据。

还是没解决我们想要的结果,如何获得表中的多条数据并打印出来呢?

#coding=utf-8import MySQLdb

conn= MySQLdb.connect(

host='localhost',

port = 3306,

user='root',

passwd='123456',

db ='test',

)

cur = conn.cursor()#获得表中有多少条数据aa=cur.execute("select * from student")print aa#打印表中的多少数据info = cur.fetchmany(aa)for ii in info: print ii

cur.close()

conn.commit()

conn.close()

通过之前的print aa 我们知道当前的表中有5条数据,fetchmany()方法可以获得多条数据,但需要指定数据的条数,通过一个for循环就可以把多条数据打印出啦!执行结果如下:

5(1L, 'Alen', '1 year 2 class', '6')

(3L, 'Huhu', '2 year 1 class', '7')

(3L, 'Tom', '1 year 1 class', '6')

(3L, 'Jack', '2 year 1 class', '7')

(3L, 'Yaheng', '2 year 2 class', '7')

[Finished in 0.1s]

python怎么操作mysql

我采用的是MySQLdb操作的MYSQL数据库。先来一个简单的例子吧:
import MySQLdb

try:
conn=MySQLdb.connect(host='localhost',user='root',passwd='root',db='test',port=3306)
cur=conn.cursor()
cur.execute('select * from user')
cur.close()
conn.close()
except MySQLdb.Error,e:
print "Mysql Error %d: %s" % (e.args[0], e.args[1])

  请注意修改你的数据库,主机名,用户名,密码。
下面来大致演示一下插入数据,批量插入数据,更新数据的例子吧:
import MySQLdb

try:
conn=MySQLdb.connect(host='localhost',user='root',passwd='root',port=3306)
cur=conn.cursor()

cur.execute('create database if not exists python')
conn.select_db('python')
cur.execute('create table test(id int,info varchar(20))')

value=[1,'hi rollen']
cur.execute('insert into test values(%s,%s)',value)

values=[]
for i in range(20):
values.append((i,'hi rollen'+str(i)))

cur.executemany('insert into test values(%s,%s)',values)

cur.execute('update test set info="I am rollen" where id=3')

conn.commit()
cur.close()
conn.close()

except MySQLdb.Error,e:
print "Mysql Error %d: %s" % (e.args[0], e.args[1])

  请注意一定要有conn.commit()这句来提交事务,要不然不能真正的插入数据。
运行之后我的MySQL数据库的结果就不上图了。
import MySQLdb

try:
conn=MySQLdb.connect(host='localhost',user='root',passwd='root',port=3306)
cur=conn.cursor()

conn.select_db('python')

count=cur.execute('select * from test')
print 'there has %s rows record' % count

result=cur.fetchone()
print result
print 'ID: %s info %s' % result

results=cur.fetchmany(5)
for r in results:
print r

print '=='*10
cur.scroll(0,mode='absolute')

results=cur.fetchall()
for r in results:
print r[1]

conn.commit()
cur.close()
conn.close()

except MySQLdb.Error,e:
print "Mysql Error %d: %s" % (e.args[0], e.args[1])

  运行结果就不贴了,太长了。
查询后中文会正确显示,但在数据库中却是乱码的。经过我从网上查找,发现用一个属性有可搞定:
在Python代码
conn = MySQLdb.Connect(host='localhost', user='root', passwd='root', db='python') 中加一个属性:
改为:
conn = MySQLdb.Connect(host='localhost', user='root', passwd='root', db='python',charset='utf8')
charset是要跟你数据库的编码一样,如果是数据库是gb2312 ,则写charset='gb2312'。

下面贴一下常用的函数:
然后,这个连接对象也提供了对事务操作的支持,标准的方法
commit() 提交
rollback() 回滚
cursor用来执行命令的方法:
callproc(self, procname, args):用来执行存储过程,接收的参数为存储过程名和参数列表,返回值为受影响的行数
execute(self, query, args):执行单条sql语句,接收的参数为sql语句本身和使用的参数列表,返回值为受影响的行数
executemany(self, query, args):执行单挑sql语句,但是重复执行参数列表里的参数,返回值为受影响的行数
nextset(self):移动到下一个结果集

cursor用来接收返回值的方法:
fetchall(self):接收全部的返回结果行.
fetchmany(self, size=None):接收size条返回结果行.如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据.
fetchone(self):返回一条结果行.
scroll(self, value, mode='relative'):移动指针到某一行.如果mode='relative',则表示从当前所在行移动value条,如果 mode='absolute',则表示从结果集的第一行移动value条.
参考资料:
MySQLdb‘s user guide
package MySQLdb

python怎么操作mysql

我采用的是MySQLdb操作的MYSQL数据库。先来一个简单的例子吧:
import MySQLdb

try:
conn=MySQLdb.connect(host='localhost',user='root',passwd='root',db='test',port=3306)
cur=conn.cursor()
cur.execute('select * from user')
cur.close()
conn.close()
except MySQLdb.Error,e:
print "Mysql Error %d: %s" % (e.args[0], e.args[1])

  请注意修改你的数据库,主机名,用户名,密码。
下面来大致演示一下插入数据,批量插入数据,更新数据的例子吧:
import MySQLdb

try:
conn=MySQLdb.connect(host='localhost',user='root',passwd='root',port=3306)
cur=conn.cursor()

cur.execute('create database if not exists python')
conn.select_db('python')
cur.execute('create table test(id int,info varchar(20))')

value=[1,'hi rollen']
cur.execute('insert into test values(%s,%s)',value)

values=[]
for i in range(20):
values.append((i,'hi rollen'+str(i)))

cur.executemany('insert into test values(%s,%s)',values)

cur.execute('update test set info="I am rollen" where id=3')

conn.commit()
cur.close()
conn.close()

except MySQLdb.Error,e:
print "Mysql Error %d: %s" % (e.args[0], e.args[1])

  请注意一定要有conn.commit()这句来提交事务,要不然不能真正的插入数据。
运行之后我的MySQL数据库的结果就不上图了。
import MySQLdb

try:
conn=MySQLdb.connect(host='localhost',user='root',passwd='root',port=3306)
cur=conn.cursor()

conn.select_db('python')

count=cur.execute('select * from test')
print 'there has %s rows record' % count

result=cur.fetchone()
print result
print 'ID: %s info %s' % result

results=cur.fetchmany(5)
for r in results:
print r

print '=='*10
cur.scroll(0,mode='absolute')

results=cur.fetchall()
for r in results:
print r[1]

conn.commit()
cur.close()
conn.close()

except MySQLdb.Error,e:
print "Mysql Error %d: %s" % (e.args[0], e.args[1])

  运行结果就不贴了,太长了。
查询后中文会正确显示,但在数据库中却是乱码的。经过我从网上查找,发现用一个属性有可搞定:
在Python代码
conn = MySQLdb.Connect(host='localhost', user='root', passwd='root', db='python') 中加一个属性:
改为:
conn = MySQLdb.Connect(host='localhost', user='root', passwd='root', db='python',charset='utf8')
charset是要跟你数据库的编码一样,如果是数据库是gb2312 ,则写charset='gb2312'。

下面贴一下常用的函数:
然后,这个连接对象也提供了对事务操作的支持,标准的方法
commit() 提交
rollback() 回滚
cursor用来执行命令的方法:
callproc(self, procname, args):用来执行存储过程,接收的参数为存储过程名和参数列表,返回值为受影响的行数
execute(self, query, args):执行单条sql语句,接收的参数为sql语句本身和使用的参数列表,返回值为受影响的行数
executemany(self, query, args):执行单挑sql语句,但是重复执行参数列表里的参数,返回值为受影响的行数
nextset(self):移动到下一个结果集

cursor用来接收返回值的方法:
fetchall(self):接收全部的返回结果行.
fetchmany(self, size=None):接收size条返回结果行.如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据.
fetchone(self):返回一条结果行.
scroll(self, value, mode='relative'):移动指针到某一行.如果mode='relative',则表示从当前所在行移动value条,如果 mode='absolute',则表示从结果集的第一行移动value条.
参考资料:
MySQLdb‘s user guide
package MySQLdb

python 怎么操作mysql中多个数据库

MySQL 的 Binlog 记录着 MySQL 数据库的所有变更信息,了解 Binlog 的结构可以帮助我们解析Binlog,甚至对 Binlog 进行一些修改,或者说是“篡改”,例如实现类似于 Oracle 的 flashback 的功能,恢复误删除的记录,把 update 的记录再还原回去等。本文将带您探讨一下这些神奇功能的实现,您会发现比您想象地要简单得多。本文指的 Binlog 是 ROW 模式的 Binlog,这也是 MySQL 8 里的默认模式,STATEMENT 模式因为使用中有很多,现在用得越来越少了。

Binlog 由事件(event)组成,请注意是事件(event)不是事务(transaction),一个事务可以包含多个事件。事件描述对数据库的修改内容。

现在我们已经了解了 Binlog 的结构,我们可以试着修改 Binlog 里的数据。例如前面举例的 Binlog 删除了一条记录,我们可以试着把这条记录恢复,Binlog 里面有个删除行(DELETE_ROWS_EVENT)的事件,就是这个事件删除了记录,这个事件和写行(WRITE_ROWS_EVENT)的事件的数据结构是完全一样的,只是删除行事件的类型是 32,写行事件的类型是 30,我们把对应的 Binlog 位置的 32 改成 30 即可把已经删除的记录再插入回去。从前面的 “show binlog events” 里面可看到这个 DELETE_ROWS_EVENT 是从位置 378 开始的,这里的位置就是 Binlog 文件的实际位置(以字节为单位)。从事件(event)的结构里面可以看到 type_code 是在 event 的第 5 个字节,我们写个 Python 小程序把把第383(378+5=383)字节改成 30 即可。当然您也可以用二进制编辑工具来改。

找出 Binlog 中的大事务

由于 ROW 模式的 Binlog 是每一个变更都记录一条日志,因此一个简单的 SQL,在 Binlog 里可能会产生一个巨无霸的事务,例如一个不带 where 的 update 或 delete 语句,修改了全表里面的所有记录,每条记录都在 Binlog 里面记录一次,结果是一个巨大的事务记录。这样的大事务经常是产生麻烦的根源。我的一个客户有一次向我抱怨,一个 Binlog 前滚,滚了两天也没有动静,我把那个 Binlog 解析了一下,发现里面有个事务产生了 1.4G 的记录,修改了 66 万条记录!下面是一个简单的找出 Binlog 中大事务的 Python 小程序,我们知道用 mysqlbinlog 解析的 Binlog,每个事务都是以 BEGIN 开头,以 COMMIT 结束。我们找出 BENGIN 前面的 “# at” 的位置,检查 COMMIT 后面的 “# at” 位置,这两个位置相减即可计算出这个事务的大小,下面是这个 Python 程序的例子。

切割 Binlog 中的大事务

对于大的事务,MySQL 会把它分解成多个事件(注意一个是事务 TRANSACTION,另一个是事件 EVENT),事件的大小由参数 binlog-row-event-max-size 决定,这个参数默认是 8K。因此我们可以把若干个事件切割成一个单独的略小的事务

ROW 模式下,即使我们只更新了一条记录的其中某个字段,也会记录每个字段变更前后的值,这个行为是 binlog_row_image 参数控制的,这个参数有 3 个值,默认为 FULL,也就是记录列的所有修改,即使字段没有发生变更也会记录。这样我们就可以实现类似 Oracle 的 flashback 的功能,我个人估计 MySQL 未来的版本从可能会基于 Binlog 推出这样的功能。

了解了 Binlog 的结构,再加上 Python 这把瑞士军刀,我们还可以实现很多功能,例如我们可以统计哪个表被修改地最多?我们还可以把 Binlog 切割成一段一段的,然后再重组,可以灵活地进行 MySQL 数据库的修改和迁移等工作。

如何使用Python3.4连接MySQL

python3发布以来,获取了广大程序员们的差评,说不稳定,又是不兼容什么的,不过差评归差评,python3既然已经发布,肯定是个趋势,但在python3.4里面,使用原来python2.7的mysqldb已经不能连接mysql数据库了,比较令人纠结,不过我们可以使用pymysql,来完成连接mysql的重任,步骤如下:

序号描述

1去github上下载pymysql的安装包pymysql

2解压到某个盘符下

3打开cmd窗口(win环境下),进入pymysql的根目录下执行命令,python setup.py install4在程序里,导入pymysql

5开始连接数据库

数据库操作的API文档连接:http://legacy.python.org/dev/peps/pep-0249/代码如下:

__author__ = 'qindongliang'

#导入pymysql的包

import pymysql

try:

#获取一个数据库连接,注意如果是UTF-8类型的,需要制定数据库conn=pymysql.connect(host='localhost',user='root',passwd='qin',db='person',port=3306,charset='utf8')cur=conn.cursor()#获取一个游标

cur.execute('select * from person')

data=cur.fetchall()

for d in data :

#注意int类型需要使用str函数转义

print("ID: "+str(d[0])+' 名字: '+d[1]+" 性别: "+d[2])cur.close()#关闭游标

conn.close()#释放数据库资源

except Exception :print("发生异常")

结果如下:

D:\python\python.exe D:/pythonide/pythonprojectworkspace/python/mysql.pyID: 1 名字: 秦天 性别: 男

ID: 2 名字: 王晶 性别: 女

Process finished with exit code 0

原文 http://qindongliang1922.iteye.com/blog/2096512补充说明:

mysqldb作为python连接mysql数据库的工具,但是mysqldb目前支撑的版本较低,安装失败。所以才尝试pymysql,这个比较简单易用软件下载地址:

python3.2.5:https://www.python.org/ftp/python/3.2.5/python-3.2.5.msipymysql3.0.5:https://pypi.python.org/packages/source/P/PyMySQL3/PyMySQL3-0.5.tar.gzmysql:http://www.phpstudy.net/phpstudy/phpStudyLite.zip(为了方便安装,我这里选择phpstudy)1、python安装目录设定为d:/python32

2、pymysql安装方法为:解压下载的文件,在cmd中运行: python setup.py install。

检验安装安装是否成功的方法:import pymysql 。 如果不报错 说明安装成功。

3、mysql安装目录为D:/phpStudy/MySQL。为避免更多配置问题,可在启动phpstudy后,将其设为系统服务4、基本操作:

(1)导入pymysql: import pymysql

(2)连接数据库: conn=pymysql.connect(host='localhost',user='root',passwd='root',db='ere',charset='utf8') 务必注意各等号前面的内容!charset参数可避免中文乱码(3)获取操作游标:cur=conn.cursor()

(4)执行sql语句,插入记录:sta=cur.execute("insert 语句") 执行成功后sta值为1。更新、删除语句与此类似。

(5)执行sql语句,查询记录:cur.execute("select语句") 执行成功后cur变量中保存了查询结果记录集,然后再用循环打印结果:

for each in cur:

print(each[1].decode('utf-8')) # each[1] 表示当前游标所在行的的第2列值,如果是中文则需要处理编码

显示全文