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

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,核心编程)