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的子类。 |