前言
Python 中常用的 Database Drivers:
Mysql、PostgreSQL、NoSQL Databases、Other Relational Databases(apsw、dataset、pymssql)
Python 本身嵌入了一款轻量级数据库 SQLite(Django 也默认使用的是这个),其他数据库则需要额外安装了。
Mysql
在 Python 中常用的 Mysql 库是 MySQLdb,但是由于还未对 python 3提供支持,所以从其中 fork 出来一个 mysqlclient --- mysql-python frok supporting Python 3;
安装前需要导入 python3-dev 头文件:
Note on Python 3 : if you are using python3 then you need to install python3-dev using the following command :
sudo apt-get install python3-dev # debian / Ubuntu
sudo yum install python3-devel # Red Hat / CentOS
brew install mysql-connector-c # macOS (Homebrew) MAC 通常还需要安装 Xcode 的 Command Line Tool
Install from PyPI
pip3 install mysqlclient
PS:pip3 list 可查看已安装的模块;
代码导入 MySQLdb 即可;
cursor
进入正题,游标(cursor)是一个存储在 Mysql 上的数据库查询,不是一条语句,而是检索出来的结果集,在存储了游标之后,即可根据需要滚动或浏览其中的数据;
游标主要用于交互式应用,其中用户需要滚动屏幕上的数据,并对数据进行浏览或作出更改;
MySQL 官方介绍:
MySQL supports cursors inside stored programs. The syntax is as in embedded SQL. Cursors have these properties:
Asensitive: The server may or may not make a copy of its result table
Read only: Not updatable
Nonscrollable: Can be traversed only in one direction and cannot skip rows
Cursor declarations must appear before handler declarations and after variable and condition declarations.
由于数据库类型太多而且很杂,SGI 小组应运而生,为不同的数据库提供一致的访问接口即 DB-API,可以在不同数据库间快速移植代码;
Python 中 MySQLdb 也遵循 DB-API,实现了 connect()、connect.cursor() 等方法……其他的 db 类也实现了同样的方法,故可以很容易移植。
#DB-API 规范:
#apilevel DB-API 模块兼容的 DB-API 版本号
#threadsafety 线程安全级别
#paramstyle 该模块支持的 SQL 语句参数风格
#DB-API规范的方法:
#connect() 连接函数,生成一个connect对象,以提供数据库操作,同事函数参数也是固定好的
其中 connect 对象又有如下方法:
close():关闭 connect 对象,关闭后无法再进行操作,需要再次建立连接实例才行。
commit():提交当前事务,没有 commit 的事务数据库是默认会回滚的。
rollback():取消当前事务。
cursor():创建游标对象。
cursor 游标对象有如下属性和方法:
方法:
close():关闭游标对象。
fetchone():得到结果集的下一行。
fetchmany([size = cursor.arraysize]):得到结果集的下几行。
fetchall():得到结果集中剩下的所有行。
excute(sql[, args]):执行一个数据库查询或命令。
excutemany(sql, args):执行多个数据库查询或命令。
属性:
connection:创建此游标对象的数据库连接。
arraysize:使用 fetchmany() 方法一次取出多少条数据,默认 1
lastrowid:相当于 PHP 的 last_inset_id()