Python操作数据库(上)

PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。

PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户端库。

执行事务

事务机制可以确保数据一致性。

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

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

Python DB API 2.0 的事务提供了两个方法 commit 或 rollback。

# SQL 语句(增删改查)
sql = "************************"

try:
   # 执行SQL语句
   cursor.execute(sql)

   # 向数据库提交
   db.commit()

except:
   # 发生错误时回滚
   db.rollback()

PyMySQL 安装

在使用 PyMySQL 之前,我们需要确保 PyMySQL 已安装。

PyMySQL 下载地址:https://github.com/PyMySQL/PyMySQL。

如果还未安装,我们可以使用以下命令安装最新版的 PyMySQL:

pip install PyMySQL

如果你的系统不支持 pip 命令,可以使用以下方式安装:

1、使用 git 命令下载安装包安装(你也可以手动下载):

扫描二维码关注公众号,回复: 924365 查看本文章
git clone https://github.com/PyMySQL/PyMySQL
cd PyMySQL/
python3 setup.py install

2、如果需要制定版本号,可以使用 curl 命令来安装:

# X.X 为 PyMySQL 的版本号
curl -L https://github.com/PyMySQL/PyMySQL/tarball/pymysql-X.X | tar xz
cd PyMySQL*
python3 setup.py install
# 现在你可以删除 PyMySQL* 目录

注意:请确保您有root权限来安装上述模块。

安装的过程中可能会出现"ImportError: No module named setuptools"的错误提示,意思是你没有安装setuptools,你可以访问https://pypi.python.org/pypi/setuptools 找到各个系统的安装方法。

Linux 系统安装实例:

$ wget https://bootstrap.pypa.io/ez_setup.py
$ python3 ez_setup.py

连接数据库

我们在一台远程 Linux 服务器上安装好了 mysql 服务,然后我们在 Windows 机器上试着连接操作如下:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time    : 2018/5/6 22:04
# @Author  : zhouyuyao
# @File    : demon2.py
import pymysql

# 打开数据库连接
db = pymysql.connect("***.***.***.***", "database-user", "database-UserPasswd", "database-name")

# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()

# 使用 execute()  方法执行 SQL 查询
cursor.execute("SELECT VERSION()")

# 使用 fetchone() 方法获取单条数据.
data = cursor.fetchone()

print("Database version : {0} ".format(data),end='')   # 输出为元组
# print ("Database version : %s " % data)              # 输出为字符串

# 关闭数据库连接
db.close()




# 结果 Database version : ('5.5.56-MariaDB',) 

创建表

当我们需要创建新的表时,我们需要先判断数据库中是否存在该表,如果存在则删除,然后再创建,如下所示:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time    : 2018/5/6 22:31
# @Author  : zhouyuyao
# @File    : demon4.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time    : 2018/5/6 22:04
# @Author  : zhouyuyao
# @File    : demon2.py
import pymysql

# 打开数据库连接
db = pymysql.connect("***.***.***.***", "database-user", "database-UserPasswd", "database-name")

# 使用 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()

这时候我们可以看到远程 mysql 服务上已经在连接的数据库中建立了这个名为 “EMPLOYEE ” 的表,

MariaDB [database-name]> show tables;
+-------------------------+
| Tables_in_database-name |
+-------------------------+
|         EMPLOYEE        |
+-------------------------+
1 row in set (0.00 sec)

MariaDB [database-name]> select * from EMPLOYEE;
Empty set (0.00 sec)

参考资料:

1. http://www.runoob.com/python3/python3-mysql.html

2. https://blog.csdn.net/zhihua_w/article/details/54313258

3. https://blog.csdn.net/liuxingen/article/details/50113923

4. https://www.cnblogs.com/zhouxiansheng/p/3929247.html

猜你喜欢

转载自my.oschina.net/u/3314358/blog/1807905