python ORM 模块peewee(一): 建立数据库对象
2016-03-13 21:22
429 查看
1. 单连接模式
peewee通过Database类及其子类来建立数据库对象,目前peewee支持的数据库有Postgres, MySQL,MySQL,SQLite 以及BerkeleyDB。这里我们仅通过MySQL来进行了解,如果对其他数据库类型的相关内容感兴趣可以参见官方文档。
mysql通过
MySQLDatabase类来初始化数据库对象,这是
Database的一个子类,继承了父类的构造函数:
class Database(database[, threadlocals=True[, autocommit=True[, fields=None[, ops=None[, autorollback=False[, use_speedups=True[, **connect_kwargs]]]]]]])
这里
database指数据库的名称, 字符串格式
threadlocals指 是否用本地线程保存连接
autocommit自动提交
fields添加orm中的数据类型到数据库中数据类型的映射
ops定义操作符映射
autorollback执行数据库请求时出错则自动回滚
use_speedups用Cpython speedup模块来加速某些queries
connect_kwargs数据库驱动中初始化所用的key
另外,
MySQLDatabase类还添加了以下选项:
commit_select = True
compound_operations = ['UNION']
for_update = True
subquery_delete_same_table = False
peewee中的mysql驱动有两个pymysql和MySQLdb,但是从源码中可以看到peewee是更倾向于使用MySQLdb的,只有当
import MySQLdb as mysql报错后才会开始引用
import pymysql as mysql。这里举例介绍一些常用的connect_kwargs,如果需要详细了解,可以参见源程序中的connections.connection类,里面的注释已经写得非常清晰了。例如:
#! /usr/bin/env python # coding: utf-8 from peewee import * db = MySQLDatabase( database = 'test',# string passwd = 'test', # string user = 'test', # string host = 'localhost', # string port = 3306, # int, 可不写 )
官方文档中建议使用数据库前先调用其
db.connect()函数,这个函数功能上并不是必须的,但是可以帮助定位错误。
实例化本地数据库还有另外一种方法:
mysql://user:passwd@ip:port/my_db这在Connecting using a Database URL中也有介绍
2 实时数据库实例化
Database类中的database字段可以先设置为None, 数据库的实例化可以在随后得到数据可靠名字之后,具体操作如下:
db = MySQLDatabase(None) # 此时若是调用db.connect()则会报错 # 数据库的名字 db_name = 'mydb' db.init( database = 'mydb', host = 'test', user = 'test', passwd = 'test' )
3 动态实例化
peewee甚至允许数据库的动态实例化,这里用到了代理模式:# 创建数据库的代理 db_proxy = Proxy() # 使用代理数据库创建表 class BaseModel(Model): class Meta: database = db_proxy class User(BaseModel): username = CharField() # 根据配置条件来选择不同的数据库 if app.config['DEBUG']: db= SqliteDatabase('local.db') elif app.config['TESTING']: db= SqliteDatabase(':memory:') else: db= PostgresqlDatabase('mega_production_db') # 通过代理来根据配置条件将选取的数据库初始化 database_proxy.initialize(db)
4 连接池
peewee为通过一个'PooledDatabase'基类Mysql, sqlite 和Postgres 提供了连接池的功能。这个基类的定义如下:class PooledDatabase(database[, max_connections=20[, stale_timeout=None[, **kwargs]]])
其中:
max_connections定义了最大连接数
stale_timeout定义了每个连接最大可用时间
具体它的MySQL子类为:
class PooledMySQLDatabase
相关文章推荐
- Python设计模式(3)-工厂方法模式
- python(5) - time模块
- leetcode 337. House Robber III-动态规划|Java|Python简洁高效
- Python设计模式(2)-策略模式
- python笔记之字符串格式化
- Python代码风格的良好养成
- Python设计模式(1)-简单工厂模式
- python闭包
- python(5)–sys模块
- Ubuntu 部署Python开发环境
- Python之Django-part 1
- python函数参数注意事项
- python中有关numpy的
- python--文本处理1
- PythonChallenge Mission 5
- python(5)-os模块
- 深度学习进行时间序列模式识别
- python爬取网站图片
- PythonChallenge Mission 4
- Python开发接水果小游戏