Python3 应用 pymysql 连贯数据库,并实现简略的增删改查,Python3 以下版本应用 MySQLdb 是用于链接 Mysql 数据库
一:PyMySQL 装置
1:应用 pip 装置 pymysql
pip install pymysql
2:应用 git 装置 pymysql
git clone https://github.com/PyMySQL/PyMySQL
cd PyMySQL/
python3 setup.py install
3:应用 curl 装置指定版本的 pymysql
# X.X 为 PyMySQL 的版本号
curl -L https://github.com/PyMySQL/PyMySQL/tarball/pymysql-X.X | tar xz
cd 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.py
python3 ez_setup.py
二:MySQLdb 装置
装置 MySQLdb,请拜访 https://sourceforge.net/proje…,(Linux 平台能够拜访:https://pypi.python.org/pypi/…)从这里可抉择适宜您的平台的安装包,分为预编译的二进制文件和源代码安装包。
如果您抉择二进制文件发行版本的话,装置过程根本装置提醒即可实现。如果从源代码进行装置的话,则须要切换到 MySQLdb 发行版本的顶级目录,并键入下列命令:
gunzip MySQL-python-1.2.2.tar.gz
tar -xvf MySQL-python-1.2.2.tar
cd MySQL-python-1.2.2
python setup.py build
python 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() 办法创立一个游标对象 cursor
cursor = 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() 办法创立一个游标对象 cursor
cursor = 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 的子类。 |