Day 2 -
编写数据库模块
在一个
Web App
中,所有数据,包括用户信息、发布的日志、评论等,都存储在数据库中。在
awesome-python-app
中,我们选择
MySQL
作为数据库。
Web App
里面有很多地方都要访问数据库。访问数据库需要创建数据库连接、游标对象,然后执行
SQL
语句,最后处理异常,清理资源。这些访问数据库的代码如果分散到各个函数中,势必无法维护,也不利于代码复用。
此外,在一个
Web App
中,有多个用户会同时访问,系统以多进程或多线程模式来处理每个用户的请求。假设以多线程为例,每个线程在访问数据库时,都必须创建仅属于自身的连接,对别的线程不可见,否则,就会造成数据库操作混乱。
所以,我们还要创建一个简单可靠的数据库访问模型,在一个线程中,能既安全又简单地操作数据库。
为什么不选择
SQLAlchemy
?
SQLAlchemy
太庞大,过度地面向对象设计导致
API
太复杂。
所以我们决定自己设计一个封装基本的
SELECT
、
INSERT
、
UPDATE
和
DELETE
操作的
db
模块:
transwarp.db
。
设计db接口
设计底层模块的原则是,根据上层调用者设计简单易用的
API
接口,然后,实现模块内部代码。
假设
transwarp.db
模块已经编写完毕,我们希望以这样的方式来调用它:
首先,初始化数据库连接信息,通过
create_engine()
函数:
from
transwarp import
db
db.create_engine(user='root', password='password', database='test', host='127.0.0.1', port=3306)
然后,就可以直接操作
SQL
了。
如果需要做一个查询,可以直接调用
sel