21.1 介绍
21.1.1 持久存储
21.1.2 基本的数据库操作和SQL语言
底层存储
数据库的底层存储通常使用文件系统,它可以是普通操作系统文件,专用操作系统
文件,甚至有可能是磁盘分区
用户界面
大部分数据库系统会提供一个命令行工具来执行SQL命令和查询,也有一些使用图
形界面
数据库
关系型数据库管理系统通常都支持多个数据库,如果其基于服务器,这些数据库都
在同一台服务器上,本例,MYSQL是一种基于服务器的关系数据库管理系统
组件
你可以将数据库存储想象为一个表格,每行数据都有一个或多个字段对应数据库
的列,每个表每个列及其数据类型的集合构成数据库结构的定义,数据库能够被创
建,也可以被删除
SQL
数据库命令和查询操作需要通过SQL语句来执行
创建数据库和赋予权限
CREATE DATABASE test;
GRANT ALL ON test.* to user(s);
选择要使用的数据库
USE test;
删除数据库
DROP DATABASE test;
创建表
CREATE TABLE users(login VARCHAR(8),uid INT,prid INT);
删除表
DROP TABLE users;
插入行
INSERT INTO users VALUES('leanna',311,1)
更新行
UPDATE users SET prid=4 WHERE prid=2;
UPDATE users SET prid=1 WHERE uid=311;
删除行
DELETE FROM users WHERE prid=%d;
DELETE FROM users;
21.1.3 数据库和Python
21.2 Python数据库应用程序
程序员接口(DB-API)
21.2.1 模块属性
数据属性
属性名描述
apilevelDB-API模块兼容的DB-API版本号
threadsafety线程安全级别
parmstyle该模块支持的SQL语句参数风格
connect()连接函数
MySQLdb.connect(host='dbserv',db='inv',user='smith')
21.2.2 连接对象
要与数据库进行通信,必须先和数据库建立连接,连接对象处理命令如何送往服务
器,以及如何从服务器接收数据等基础功能,连接成功后就能向数据库服务器发送
请求,得到响应
连接对象方法
close()关闭数据库连接
commit()提交当前事务
rollback()取消当前事务
cursor()使用这个连接创建并返回一个游标或类游标的对象
errorhandler(cxn, cur,errcls,errval)
21.2.3 游标对象
当你建立连接之后,就可以与数据库进行交互,一个游标允许用户执行数据库命令
和得到查询结果,一个Python DB-API游标对象总是扮演游标角色,无论数据库是
否真正支持游标,从这一点讲,数据库接口程序必须实现游标对象,只有这样才能
保证无论使用何种后端数据库你的代码都不需要做任何改变
21.2.4 类型对象和构造器
21.2.5 关系数据库
21.2.6 数据库和Python:接口程序
MySQL
# api-get install python-mysql* -y
# python
>>> import MySQLdb
>>> cxn = MySQLdb.connect(user='root',passwd='123456')
>>> cxn.query('DROP DATABASE test')
>>> cxn.query('CREATE DATABASE test')
>>> cxn.query("GRANT ALL ON test.* to 'test'@localhost")
>>> cxn.commit()
>>> cxn.close()
以上代码我们没有使用cursor对象,某些接口程序拥有连接对象,这些连接对象拥
有query()方法,可以执行SQL查询,我们不建议使用这种方法
下面我们使用游标对象(cursors)和他们的execute()方法,下一个交互集演示了
创建表
>>> cxn = MySQLdb.connect(user='root',passwd='123456',db='test')
>>> cur = cxn.cursor()
>>> cur.execute('CREATE TABLE users(login VARCHAR(8), uid INT)')
0L
>>> cur.execute("INSERT INTO users VALUES('john',7000)")
1L
>>> cur.execute("INSERT INTO users VALUES('john',7001)")
1L
>>> cur.execute("INSERT INTO users VALUES('jane',7001)")
1L
>>> cur.execute("INSERT INTO users VALUES('bob',7200)")
1L
>>> cur.execute("SELECT * FROM users WHERE login LIKE 'j%'")
3L
>>> for data in cur.fetchall():
... print '%s\t%s' % data
...
john 7000
john 7001
jane 7001
最后一个特性是更新表,包括更新或删除数据
>>> cur.execute("UPDATE users SET uid=7100 WHERE uid=7001")
2L
>>> cur.execute("SELECT * FROM users")
4L
>>> for data in cur.fetchall():
... print '%s\t%s' % data
...
john 7000
john 7100
jane 7100
bob 7200
>>> cur.execute("UPDATE users SET uid=7100 WHERE uid= 7000")
1L
>>> cur.execute("SELECT * FROM users")
4L
>>> for data in cur.fetchall():
... print '%s\t%s' % data
...
john 7100
john 7100
jane 7100
bob 7200
>>> cur.execute('DELETE FROM users WHERE login="bob"')
1L
>>> cur.execute('DROP TABLE users')
0L
>>> cur.close()
>>> cxn.commit()
>>> cxn.close()
21.3 对象-关系管理器(ORMs)
21.3.1 考虑对象,而不是SQL
21.3.2 Python和ORM
21.3.4 总结
21.4 相关模块