Python操作MySQL数据库的三种方法

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

(1) 什么是MySQLdb?

  MySQLdb 是用于 Python 连接 MySQL 数据库的接口,它实现了 Python 数据库 API 规范 V2.0,基于 MySQL C API 上建立的。

(2) 源码安装 MySQLdb: https://pypi.python.org/pypi/MySQL-python

$ tar zxvf MySQL-python-.tar.gz
$ cd MySQL-python-

$ python setup.py build
$ python setup.py install

(3) MySQLdb 的使用:

#!/usr/bin/env python

coding=utf-8

import MySQLdb

def connectdb():
print('连接到mysql服务器...')

打开数据库连接

# 用户名:p, 密码:12345.,用户名和密码需要改成你自己的mysql用户名和密码,并且要创建数据库TESTDB,并在TESTDB数据库中创建好表Student
db = MySQLdb.connect("localhost","p","12345.","TESTDB")
print('连接上了!')
return db

def createtable(db):

使用cursor()方法获取操作游标

cursor = db.cursor()
# 如果存在表Sutdent先删除
cursor.execute("DROP TABLE IF EXISTS Student")
sql = """CREATE TABLE Student (
        ID CHAR(10) NOT NULL,
        Name CHAR(8),
        Grade INT )"""
# 创建Sutdent表
cursor.execute(sql)

def insertdb(db):

使用cursor()方法获取操作游标

cursor = db.cursor()
# SQL 插入语句
sql = """INSERT INTO Student
     VALUES ('001', 'CZQ', 70),
            ('002', 'LHQ', 80),
            ('003', 'MQ', 90),
            ('004', 'WH', 80),
            ('005', 'HP', 70),
            ('006', 'YF', 66),
            ('007', 'TEST', 100)"""

#sql = "INSERT INTO Student(ID, Name, Grade) \
#    VALUES ('%s', '%s', '%d')" % \
#    ('001', 'HP', 60)
try:
    # 执行sql语句
    cursor.execute(sql)
    # 提交到数据库执行
    db.commit()
except:
    # Rollback in case there is any error
    print '插入数据失败!'
    db.rollback()

def querydb(db):

使用cursor()方法获取操作游标

cursor = db.cursor()
# SQL 查询语句
#sql = "SELECT * FROM Student \
#    WHERE Grade > '%d'" % (80)
sql = "SELECT * FROM Student"
try:
    # 执行SQL语句
    cursor.execute(sql)
    # 获取所有记录列表
    results = cursor.fetchall()
    for row in results:
        ID = row[0]
        Name = row[1]
        Grade = row[2]
        # 打印结果
        print "ID: %s, Name: %s, Grade: %d" % \
            (ID, Name, Grade)
except:
    print "Error: unable to fecth data"

def deletedb(db):

使用cursor()方法获取操作游标

cursor = db.cursor()

SQL 删除语句

sql = "DELETE FROM Student WHERE Grade = '%d'" % (100)

try:
   # 执行SQL语句
   cursor.execute(sql)
   # 提交修改
   db.commit()
except:
    print '删除数据失败!'
    # 发生错误时回滚
    db.rollback()

def updatedb(db):

使用cursor()方法获取操作游标

cursor = db.cursor()
# SQL 更新语句
sql = "UPDATE Student SET Grade = Grade + 3 WHERE ID = '%s'" % ('003')
try:
    # 执行SQL语句
    cursor.execute(sql)
    # 提交到数据库执行
    db.commit()
except:
    print '更新数据失败!'
    # 发生错误时回滚
    db.rollback()

def closedb(db):
db.close()

def main():
db = connectdb() # 连接MySQL数据库

createtable(db)     # 创建表
insertdb(db)        # 插入数据
print '\n插入数据后:'
querydb(db) 
deletedb(db)        # 删除数据
print '\n删除数据后:'
querydb(db)
updatedb(db)        # 更新数据
print '\n更新数据后:'
querydb(db)

closedb(db)         # 关闭数据库

if name == 'main':
main()

#!/usr/bin/env python
import MySQLdb

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

#!/usr/bin/env python 
#* coding:utf-8 *

import MySQLdb

try: 
conn = MySQLdb.Connect(host='192.168.8.40',user='root',passwd='root',db='mysql',port=3306)

cur = conn.cursor()  
rs = cur.execute('select user,password,host from user')  
rs = cur.execute('create database if not exists python')  
conn.select_db('python')  

cur.execute('create table test(id int,info varchar(30))')   

value = [1,'hi jack']  

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

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

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

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

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

except MySQLdb.Error,e: 
print 'mysql error msg: %d,%s' % (e.args[0],e.args[1])

import MySQLdb

try: 
conn = MySQLdb.Connect(host='192.168.8.40',user='root',passwd='root',db='mysql',port=3306,charset='utf8')

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  

result2 = cur.fetchmany(3)  
for record in result2:  
    print record  

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

result3 = cur.fetchall()  
for record in result3:  
    print record[0] ,'---',record[1]  

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

except MySQLdb.Error,e: 
print 'mysql error msg: %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条.

  1. PyMySQL 的使用

(1) 什么是 PyMySQL?

  PyMySQL 是 Python 中用于连接 MySQL 服务器的一个库,它遵循 Python 数据库 API 规范 V2.0,并包含了 pure-Python MySQL 客户端库。

(2) 安装 PyMysql:

pip install PyMysql

(3) 使用 PyMySQL:

#!/usr/bin/env python

coding=utf-8

import pymysql

def connectdb():
print('连接到mysql服务器...')

打开数据库连接

# 用户名:p, 密码:12345.,用户名和密码需要改成你自己的mysql用户名和密码,并且要创建数据库TESTDB,并在TESTDB数据库中创建好表Student
db = pymysql.connect("localhost","hp","Hp12345.","TESTDB")
print('连接上了!')
return db

def createtable(db):

使用cursor()方法获取操作游标

cursor = db.cursor()

# 如果存在表Sutdent先删除
cursor.execute("DROP TABLE IF EXISTS Student")
sql = """CREATE TABLE Student (
        ID CHAR(10) NOT NULL,
        Name CHAR(8),
        Grade INT )"""

# 创建Sutdent表
cursor.execute(sql)

def insertdb(db):

使用cursor()方法获取操作游标

cursor = db.cursor()

# SQL 插入语句
sql = """INSERT INTO Student
     VALUES ('001', 'CZQ', 70),
            ('002', 'LHQ', 80),
            ('003', 'MQ', 90),
            ('004', 'WH', 80),
            ('005', 'HP', 70),
            ('006', 'YF', 66),
            ('007', 'TEST', 100)"""

#sql = "INSERT INTO Student(ID, Name, Grade) \
#    VALUES ('%s', '%s', '%d')" % \
#    ('001', 'HP', 60)
try:
    # 执行sql语句
    cursor.execute(sql)
    # 提交到数据库执行
    db.commit()
except:
    # Rollback in case there is any error
    print '插入数据失败!'
    db.rollback()

def querydb(db):

使用cursor()方法获取操作游标

cursor = db.cursor()

# SQL 查询语句
#sql = "SELECT * FROM Student \
#    WHERE Grade > '%d'" % (80)
sql = "SELECT * FROM Student"
try:
    # 执行SQL语句
    cursor.execute(sql)
    # 获取所有记录列表
    results = cursor.fetchall()
    for row in results:
        ID = row[0]
        Name = row[1]
        Grade = row[2]
        # 打印结果
        print "ID: %s, Name: %s, Grade: %d" % \
            (ID, Name, Grade)
except:
    print "Error: unable to fecth data"

def deletedb(db):

使用cursor()方法获取操作游标

cursor = db.cursor()

# SQL 删除语句
sql = "DELETE FROM Student WHERE Grade = '%d'" % (100)

try:
   # 执行SQL语句
   cursor.execute(sql)
   # 提交修改
   db.commit()
except:
    print '删除数据失败!'
    # 发生错误时回滚
    db.rollback()

def updatedb(db):

使用cursor()方法获取操作游标

cursor = db.cursor()

# SQL 更新语句
sql = "UPDATE Student SET Grade = Grade + 3 WHERE ID = '%s'" % ('003')

try:
    # 执行SQL语句
    cursor.execute(sql)
    # 提交到数据库执行
    db.commit()
except:
    print '更新数据失败!'
    # 发生错误时回滚
    db.rollback()

def closedb(db):
db.close()

def main():
db = connectdb() # 连接MySQL数据库

createtable(db)     # 创建表
insertdb(db)        # 插入数据
print '\n插入数据后:'
querydb(db) 
deletedb(db)        # 删除数据
print '\n删除数据后:'
querydb(db)
updatedb(db)        # 更新数据
print '\n更新数据后:'
querydb(db)

closedb(db)         # 关闭数据库

if name == 'main':
main()

import pymysql

打开数据库连接(ip/数据库用户名/登录密码/数据库名)

db = pymysql.connect("localhost", "root", "root", "test")

使用 cursor() 方法创建一个游标对象 cursor

cursor = db.cursor()

使用 execute() 方法执行 SQL 查询

cursor.execute("SELECT VERSION()")

使用 fetchone() 方法获取单条数据.

data = cursor.fetchone() 
print("Database version : %s " % data)

关闭数据库连接

db.close()

import pymysql

打开数据库连接(ip/数据库用户名/登录密码/数据库名)

db = pymysql.connect("localhost", "root", "root", "test")

使用 cursor() 方法创建一个游标对象 cursor

cursor = db.cursor()

SQL 插入语句

sql = """INSERT INTO user(name) 
VALUES ('Mac')""" 
try:

执行sql语句

cursor.execute(sql)

提交到数据库执行

db.commit() 
except:

如果发生错误则回滚

db.rollback()

关闭数据库连接

db.close()

import pymysql

打开数据库连接(ip/数据库用户名/登录密码/数据库名)

db = pymysql.connect("localhost", "root", "root", "test")

使用 cursor() 方法创建一个游标对象 cursor

cursor = db.cursor()

SQL 查询语句

sql = "SELECT * FROM user"

try:

执行SQL语句

cursor.execute(sql)  
# 获取所有记录列表  
results = cursor.fetchall()  
for row in results:  
    id = row[0]  
    name = row[1]  
    # 打印结果  
    print("id=%s,name=%s" % \  
          (id, name))  

except: 
print("Error: unable to fecth data")

关闭数据库连接

db.close()

import pymysql

打开数据库连接(ip/数据库用户名/登录密码/数据库名)

db = pymysql.connect("localhost", "root", "root", "test")

使用 cursor() 方法创建一个游标对象 cursor

cursor = db.cursor()

SQL 更新语句

sql = "UPDATE user SET name = 'Bob' WHERE id = 1" 
try:

执行SQL语句

cursor.execute(sql)  
# 提交到数据库执行  
db.commit()  

except:

发生错误时回滚

db.rollback()  

关闭数据库连接

db.close()

import pymysql

打开数据库连接(ip/数据库用户名/登录密码/数据库名)

db = pymysql.connect("localhost", "root", "root", "test")

使用 cursor() 方法创建一个游标对象 cursor

cursor = db.cursor()

SQL 删除语句

sql = "DELETE FROM user WHERE id = 1" 
try:

执行SQL语句

cursor.execute(sql)  
# 提交修改  
db.commit()  

except:

发生错误时回滚

db.rollback()  

关闭数据库连接

db.close() 

  1. mysql.connector 的使用

(1) 什么是 mysql.connector?

  由于 MySQL 服务器以独立的进程运行,并通过网络对外服务,所以,需要支持 Python 的 MySQL 驱动来连接到 MySQL 服务器。

目前,有两个 MySQL 驱动:

mysql-connector-python:是 MySQL 官方的纯 Python 驱动;

MySQL-python :是封装了 MySQL C驱动的 Python 驱动。

(2) 安装 mysql.connector:

pip install mysql-connector-python
pip install MySQL-python

(3) 使用 mysql.connector:

#!/usr/bin/env python

coding=utf-8

import mysql.connector

def connectdb():
print('连接到mysql服务器...')

打开数据库连接

# 用户名:p, 密码:12345.,用户名和密码需要改成你自己的mysql用户名和密码,并且要创建数据库TESTDB,并在TESTDB数据库中创建好表Student
db = mysql.connector.connect(user="p", passwd="12345.", database="TESTDB", use_unicode=True)
print('连接上了!')
return db

def createtable(db):

使用cursor()方法获取操作游标

cursor = db.cursor()

# 如果存在表Sutdent先删除
cursor.execute("DROP TABLE IF EXISTS Student")
sql = """CREATE TABLE Student (
        ID CHAR(10) NOT NULL,
        Name CHAR(8),
        Grade INT )"""

# 创建Sutdent表
cursor.execute(sql)

def insertdb(db):

使用cursor()方法获取操作游标

cursor = db.cursor()

# SQL 插入语句
sql = """INSERT INTO Student
     VALUES ('001', 'CZQ', 70),
            ('002', 'LHQ', 80),
            ('003', 'MQ', 90),
            ('004', 'WH', 80),
            ('005', 'HP', 70),
            ('006', 'YF', 66),
            ('007', 'TEST', 100)"""

#sql = "INSERT INTO Student(ID, Name, Grade) \
#    VALUES ('%s', '%s', '%d')" % \
#    ('001', 'HP', 60)
try:
    # 执行sql语句
    cursor.execute(sql)
    # 提交到数据库执行
    db.commit()
except:
    # Rollback in case there is any error
    print '插入数据失败!'
    db.rollback()

def querydb(db):

使用cursor()方法获取操作游标

cursor = db.cursor()

# SQL 查询语句
#sql = "SELECT * FROM Student \
#    WHERE Grade > '%d'" % (80)
sql = "SELECT * FROM Student"
try:
    # 执行SQL语句
    cursor.execute(sql)
    # 获取所有记录列表
    results = cursor.fetchall()
    for row in results:
        ID = row[0]
        Name = row[1]
        Grade = row[2]
        # 打印结果
        print "ID: %s, Name: %s, Grade: %d" % \
            (ID, Name, Grade)
except:
    print "Error: unable to fecth data"

def deletedb(db):

使用cursor()方法获取操作游标

cursor = db.cursor()

# SQL 删除语句
sql = "DELETE FROM Student WHERE Grade = '%d'" % (100)

try:
   # 执行SQL语句
   cursor.execute(sql)
   # 提交修改
   db.commit()
except:
    print '删除数据失败!'
    # 发生错误时回滚
    db.rollback()

def updatedb(db):

使用cursor()方法获取操作游标

cursor = db.cursor()

# SQL 更新语句
sql = "UPDATE Student SET Grade = Grade + 3 WHERE ID = '%s'" % ('003')

try:
    # 执行SQL语句
    cursor.execute(sql)
    # 提交到数据库执行
    db.commit()
except:
    print '更新数据失败!'
    # 发生错误时回滚
    db.rollback()

def closedb(db):
db.close()

def main():
db = connectdb() # 连接MySQL数据库

createtable(db)     # 创建表
insertdb(db)        # 插入数据
print '\n插入数据后:'
querydb(db) 
deletedb(db)        # 删除数据
print '\n删除数据后:'
querydb(db)
updatedb(db)        # 更新数据
print '\n更新数据后:'
querydb(db)

closedb(db)         # 关闭数据库

if name == 'main':
main()











​#!/usr/bin/python 
#coding=utf-8

import mysql.connector 
from mysql.connector import errorcode

class mysqlconnectordemo(object): 
def init(self): 
pass 
def connect(self,conf): 
try: 
conn = mysql.connector.connect(**conf) 
print("conn success!") 
except mysql.connector.Error as err: 
if err.errno == errorcode.ER_ACCESS_DENIED_ERROR: 
print("Something is wrong with your user name or password") 
elif err.errno == errorcode.ER_BAD_DB_ERROR: 
print("Database does not exist") 
else: 
print(err) 
else: 
conn.close()

def query(self,conf,sql):  
    try:  
        conn = mysql.connector.connect(**conf)  
        print("conn success!")  
        cursor = conn.cursor()  
        try:  
            cursor.execute(sql)  
            values = cursor.fetchall()#返回是一个由元组构成的list,每一个元组是一行值  
            print type(values)  
            for i in values:  
                print i  
        except mysql.connector.Error as err:  
            print('query datas error!{}'.format(err))  
    except mysql.connector.Error as err:  
        if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:  
            print("Something is wrong with your user name or password")  
        elif err.errno == errorcode.ER_BAD_DB_ERROR:  
            print("Database does not exist")  
        else:  
            print(err)  
    else:  
        conn.close()  

def insert(self,conf,sql):  
    try:  
        conn = mysql.connector.connect(**conf)  
        print("conn success!")  
        cursor = conn.cursor()  
        try:  
            cursor.execute(sql)  
            conn.commit()  
            cursor.close()  
        except mysql.connector.Error as err:  
            print('insert datas error!{}'.format(err))  
    except mysql.connector.Error as err:  
        if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:  
            print("Something is wrong with your user name or password")  
        elif err.errno == errorcode.ER_BAD_DB_ERROR:  
            print("Database does not exist")  
        else:  
            print(err)  
    else:  
        conn.close()  

#!/usr/bin/python 
#coding=utf-8

import MySQLdb

class mysqldbdemo(object): 
def init(self): 
pass 
def connect(self): 
conn = MySQLdb.connect("host_ip","user","password","database") 
conn.close()

def query(self,sql):  
    conn = MySQLdb.connect("host_ip","user","password","database")  
    cursor = conn.cursor()  
    try:  
        cursor.execute(sql)  
        values = cursor.fetchall()#返回是一个由元组构成的tuple,每一个元组是一行值  
        print type(values)  
        for i in values:  
            print i  
    except:  
        print "Error: unable to fecth data"  
    conn.close()  

def insert(self,sql):  
    conn = MySQLdb.connect("host_ip","user","password","database")  
    cursor = conn.cursor()  
    try:  
        cursor.execute(sql)  
        conn.commit()  
    except:  
        conn.rollback()  
    conn.close()  










本文转自 chengxuyonghu 51CTO博客,原文链接:http://blog.51cto.com/6226001001/2065975,如需转载请自行联系原作者
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1天前
|
存储 关系型数据库 MySQL
Python搭建代理IP池实现存储IP的方法
Python搭建代理IP池实现存储IP的方法
|
1天前
|
Python
Python动态IP代理防止被封的方法
Python动态IP代理防止被封的方法
|
1天前
|
数据采集 存储 安全
python检测代理ip是否可用的方法
python检测代理ip是否可用的方法
|
3天前
|
数据可视化 测试技术 Python
在Python和R中使用交叉验证方法提高模型性能
在Python和R中使用交叉验证方法提高模型性能
|
3天前
|
存储 监控 开发工具
对象存储OSS产品常见问题之python sdk中的append_object方法支持追加上传xls文件如何解决
对象存储OSS是基于互联网的数据存储服务模式,让用户可以安全、可靠地存储大量非结构化数据,如图片、音频、视频、文档等任意类型文件,并通过简单的基于HTTP/HTTPS协议的RESTful API接口进行访问和管理。本帖梳理了用户在实际使用中可能遇到的各种常见问题,涵盖了基础操作、性能优化、安全设置、费用管理、数据备份与恢复、跨区域同步、API接口调用等多个方面。
34 9
|
3天前
|
Python
python面型对象编程进阶(继承、多态、私有化、异常捕获、类属性和类方法)(上)
python面型对象编程进阶(继承、多态、私有化、异常捕获、类属性和类方法)(上)
39 0
|
6天前
|
SQL 关系型数据库 数据库
Python中SQLite数据库操作详解:利用sqlite3模块
【4月更文挑战第13天】在Python编程中,SQLite数据库是一个轻量级的关系型数据库管理系统,它包含在一个单一的文件内,不需要一个单独的服务器进程或操作系统级别的配置。由于其简单易用和高效性,SQLite经常作为应用程序的本地数据库解决方案。Python的内置sqlite3模块提供了与SQLite数据库交互的接口,使得在Python中操作SQLite数据库变得非常容易。
|
7天前
|
数据采集 JSON 网络协议
「Python系列」Python urllib库(操作网页URL对网页的内容进行抓取处理)
`urllib` 是 Python 的一个标准库,用于打开和读取 URLs。它提供了一组模块,允许你以编程方式从网络获取数据,如网页内容、文件等。
29 0
|
存储 NoSQL 数据库
|
存储 NoSQL Redis