Python3 应用pymysql 连贯数据库,并实现简略的增删改查,Python3以下版本应用MySQLdb是用于链接Mysql数据库

一:PyMySQL 装置

1:应用pip装置pymysql

pip install pymysql

2:应用git装置pymysql

git clone https://github.com/PyMySQL/PyMySQLcd PyMySQL/python3 setup.py install

3:应用curl装置指定版本的pymysql

# X.X 为 PyMySQL 的版本号curl -L https://github.com/PyMySQL/PyMySQL/tarball/pymysql-X.X | tar xzcd PyMySQL*python setup.py install# 当初你能够删除 PyMySQL* 目录

装置的过程中可能会呈现"ImportError: No module named setuptools"的谬误提醒,意思是你没有装置setuptools,你能够拜访https://pypi.python.org/pypi/... 找到各个系统的装置办法。

Linux 零碎装置实例:

wget https://bootstrap.pypa.io/ez_setup.pypython3 ez_setup.py

二:MySQLdb装置

装置MySQLdb,请拜访 https://sourceforge.net/proje... ,(Linux平台能够拜访:https://pypi.python.org/pypi/...)从这里可抉择适宜您的平台的安装包,分为预编译的二进制文件和源代码安装包。

如果您抉择二进制文件发行版本的话,装置过程根本装置提醒即可实现。如果从源代码进行装置的话,则须要切换到MySQLdb发行版本的顶级目录,并键入下列命令:

gunzip MySQL-python-1.2.2.tar.gztar -xvf MySQL-python-1.2.2.tarcd MySQL-python-1.2.2python setup.py buildpython setup.py install

三:数据库操作

以下为应用pymysql连贯数据库形式(应用MySQLdb的话将pymysql换成MySQLdb)

1:查问数据

• fetchone(): 该办法获取下一个查问后果集。后果集是一个对象
• fetchall():接管全副的返回后果行.
• rowcount: 这是一个只读属性,并返回执行execute()办法后影响的行数。

import pymysql # 关上数据库连贯db = pymysql.connect("localhost","testuser","test123","TESTDB" )  # localhost:数据库地址  testuser:数据库账号  test123:数据库明码   TESTDB:数据库名称 应用MySQLdb加charset='utf8'  # 应用 cursor() 办法创立一个游标对象 cursorcursor = db.cursor() # 应用 execute()  办法执行 SQL 查问 cursor.execute("SELECT VERSION()") # 应用 fetchone() 办法获取单条数据   fetchall()查问多条数据.data = cursor.fetchone() print ("Database version : %s " % data) # 敞开数据库连贯db.close()

2:创立数据库表

import pymysql # 关上数据库连贯db = pymysql.connect("localhost","testuser","test123","TESTDB" ) # 应用 cursor() 办法创立一个游标对象 cursorcursor = db.cursor() # 应用 execute() 办法执行 SQL,如果表存在则删除cursor.execute("DROP TABLE IF EXISTS EMPLOYEE") # 应用预处理语句创立表sql = """CREATE TABLE EMPLOYEE (         FIRST_NAME  CHAR(20) NOT NULL,         LAST_NAME  CHAR(20),         AGE INT,           SEX CHAR(1),         INCOME FLOAT )""" cursor.execute(sql) # 敞开数据库连贯db.close()

3:插入数据

import pymysql # 关上数据库连贯db = pymysql.connect("localhost","testuser","test123","TESTDB" ) # 应用cursor()办法获取操作游标 cursor = db.cursor() # SQL 插入语句sql = """INSERT INTO EMPLOYEE(FIRST_NAME,         LAST_NAME, AGE, SEX, INCOME)         VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""try:   # 执行sql语句   cursor.execute(sql)   # 提交到数据库执行   db.commit()except:   # 如果产生谬误则回滚   db.rollback() # 敞开数据库连贯db.close()

4:更新数据

import pymysql # 关上数据库连贯db = pymysql.connect("localhost","testuser","test123","TESTDB" ) # 应用cursor()办法获取操作游标 cursor = db.cursor() # SQL 更新语句sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M')try:   # 执行SQL语句   cursor.execute(sql)   # 提交到数据库执行   db.commit()except:   # 产生谬误时回滚   db.rollback() # 敞开数据库连贯db.close()

5:删除数据

import pymysql # 关上数据库连贯db = pymysql.connect("localhost","testuser","test123","TESTDB" ) # 应用cursor()办法获取操作游标 cursor = db.cursor() # SQL 删除语句sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)try:   # 执行SQL语句   cursor.execute(sql)   # 提交批改   db.commit()except:   # 产生谬误时回滚   db.rollback() # 敞开连贯db.close()

四:执行事务

事务机制能够确保数据一致性。

事务应该具备4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID个性。

• 原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包含的诸操作要么都做,要么都不做。
• 一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
• 隔离性(isolation)。一个事务的执行不能被其余事务烦扰。即一个事务外部的操作及应用的数据对并发的其余事务是隔离的,并发执行的各个事务之间不能相互烦扰。
• 持久性(durability)。持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的扭转就应该是永久性的。接下来的其余操作或故障不应该对其有任何影响。

五:错误处理

异样形容
Warning当有重大正告时触发,例如插入数据是被截断等等。必须是 StandardError 的子类。
Error正告以外所有其余谬误类。必须是 StandardError 的子类。
InterfaceError当有数据库接口模块自身的谬误(而不是数据库的谬误)产生时触发。 必须是Error的子类。
DatabaseError和数据库无关的谬误产生时触发。 必须是Error的子类。
DataError当有数据处理时的谬误产生时触发,例如:除零谬误,数据超范围等等。 必须是DatabaseError的子类。
OperationalError指非用户管制的,而是操作数据库时产生的谬误。例如:连贯意外断开、 数据库名未找到、事务处理失败、内存调配谬误等等操作数据库是产生的谬误。 必须是DatabaseError的子类。
IntegrityError完整性相干的谬误,例如外键查看失败等。必须是DatabaseError子类。
InternalError数据库的外部谬误,例如游标(cursor)生效了、事务同步失败等等。 必须是DatabaseError子类。
ProgrammingError程序谬误,例如数据表(table)没找到或已存在、SQL语句语法错误、 参数数量谬误等等。必须是DatabaseError的子类。
NotSupportedError不反对谬误,指应用了数据库不反对的函数或API等。例如在连贯对象上 应用.rollback()函数,然而数据库并不反对事务或者事务已敞开。 必须是DatabaseError的子类。