关于python:python操作数据库

4次阅读

共计 3653 个字符,预计需要花费 10 分钟才能阅读完成。

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 的子类。
正文完
 0