您的位置:首页 > 数据库

[PYTHON] 核心编程笔记(21.数据库编程)

2014-01-04 15:54 369 查看
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 相关模块
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  web python 核心编程