Python版的数据库查询构造器、ORM及动态迁移数据表。
Orator
Orator提供一个简单和方便的数据库数据处理库。
它的灵感来源于PHP的Laravel框架,借助其思想实现了python版的查询构造器和ORM。
这是完整的文档:http://orator-orm.com/docs
安装
你可以有两种不同的安装方式。
- 使用pip安装。
pip install orator
- 使用官方的源码安装(https://github.com/sdispater/orator)
基本使用
配置
你需要开始配置数据库连接,及创建一个DatabaseManager实例。
from orator import DatabaseManager, Model
config = {
'mysql': {
'driver': 'mysql',
'host': 'localhost',
'database': 'database',
'user': 'root',
'password': '',
'prefix': ''
}
}
db = DatabaseManager(config)
Model.set_connection_resolver(db)
定义一个模型
class User(Model):
pass
在模型中定义__table__属性来确定表名。
class User(Model):
__table__ = 'my_users'
其次还可以定义__primary_key来确定主键,__connection__来确定连接。
如果你不希望默认创建updated_at和created_at字段,则将__timestamps__属性置为False。
查询模型所有数据
users = User.all()
通过主键查询数据
user = User.find(1)
print(user.name)
使用模型查询
users = User.where('votes', '>', 100).take(10).get()
for user in users:
print(user.name)
聚合查询
你可以使用查询构造器。
count = User.where('votes', '>', 100).count()
users = User.where_raw('age > ? and votes = 100', [25]).get()
分片查询
如果你希望一次查询一部分数据,则可以使用chunk方法。
for users in User.chunk(100):
for user in users:
# ...
指定数据库连接
在模型中,可以使用on方法指定数据库连接。
user = User.on('connection-name').find(1)
你还可以使用read/write指定只读或只写连接。
user = User.on_write_connection().find(1)
字段管理
当创建一个新的模型,通过构造函数给模型设置属性。
例如:在模型中设置__filltble或者__guarded__属性。
在模型中定义填充字段
这个__filltable__属性。
class User(Model):
__fillable__ = ['first_name', 'last_name', 'email']
在模型中定义禁止字段
这个__guarded__属性。
class User(Model):
__guarded__ = ['id', 'password']
禁止所有字段
__guarded__ = ['*']
插入、更新和删除
保存一个新的模型
在数据库中创建一个新的记录,使用save方法。
user = User()
user.name = 'John'
user.save()
在创建完成之后,可以这样获取到自增id。
inserted_id = user.id
使用create方法
# Create a new user in the database
user = User.create(name='John')
# Retrieve the user by attributes, or create it if it does not exist
user = User.first_or_create(name='John')
# Retrieve the user by attributes, or instantiate it if it does not exist
user = User.first_or_new(name='John')
更新数据
user = User.find(1)
user.name = 'Foo'
user.save()
你也可以这样更新数据。
affected_rows = User.where('votes', '>', 100).update(status=2)
删除数据
user = User.find(1)
user.delete()
通过主键删除数据
User.destroy(1)
User.destroy(1, 2, 3)
你还可以这样删除数据。
affected_rows = User.where('votes', '>' 100).delete()
仅仅更新时间
如果你想更新模型的时间,可以使用touch方法。
user.touch()
时间Timestamps
在这个模型中created_at和updated_at是在数据库中默认生成的。如果,你不希望创建这两个字段,你可以设置属性__timestamps__为false。
class User(Model):
__timestamps__ = False
提供自定义时间格式
如果,你希望自己定义时间格式,你可以这样操作。
class User(Model):
def get_date_format():
return 'DD-MM-YY'
Python版的数据库查询构造器、ORM及动态迁移数据表。的更多相关文章
- python操作oracle数据库-查询
python操作oracle数据库-查询 参照文档 http://www.oracle.com/technetwork/cn/articles/dsl/mastering-oracle-python- ...
- Python短小精悍的Orator查询构造器
查询构造器 介绍 这个数据库查询构造器,提供便利的接口可以创建和执行查询操作,可以在大多数数据库中使用. 查询select操作 查询表中所有的数据. users = db.table('users') ...
- SQL查找数据库中所有没有主键的数据表脚本
--SQL查找数据库中所有没有主键的数据表脚本 --运行脚本后在消息中可能会显示下面现象中的一种:--(1)数据库中所有数据表都有主键(则证明所有数据表都有主键)--(2)当前数据表[数据表名]没有主 ...
- 使用DB查询分析器实现异构数据源中数据表的相互访问
1 引言 硕士程序员马根峰(CSDN专访马根峰:海量数据处理与分析大师的中国本土程序员)推出的个人作品----万能数据库查询分析器,中文版本DB 查询分析器.英文版本<DB Query A ...
- python连接mysql数据库,并进行添加、查找数据
1.删除MySQL数据表中的记录 DELETE FROM table_name WHERE condition; python操作mysql1数据库 import pymysql # 连接mysql数 ...
- python自动化测试之mysql5.0版本数据库查询数据时出现乱码问题分析
1.确保数据库编码是utf8编码.若不是,请将my.ini的client,mysql,mysqld三个字段下面添加default-character-set = utf8,这样可以永久改变在新建数据库 ...
- Python学习(21)python操作mysql数据库_操作
目录 数据库连接 创建数据库表 数据库插入操作 数据库查询操作 数据库更新操作 删除操作 执行事务 错误处理 数据库连接 连接数据库前,请先确认以下事项: 您已经创建了数据库 TEST. 在TEST数 ...
- python操作mysql数据库实现增删改查
Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口. Python 数据库接口支持非常多的数据库,你可以选择适合你项目的数据库: ...
- Python 操作 SQL 数据库 (ORCAL)
MySQLdb.connect是python 连接MySQL数据库的方法,在Python中 import MySQLdb即可使用,至于connect中的参数很简单:host:MySQL服务器名user ...
随机推荐
- Render树、RenderObject与RenderLayer
Chapter: 呈现树的构建 1. 呈现树与CSS盒子模型千丝万缕的关系 2. 呈现树与DOM树的关系 3. 浏览器构建呈现树的流程 4. Firefox的规则树和样式上下文树 5. 规则树是如何解 ...
- msm8909+android5.1分区及烧录的镜像文件介绍【转】
本文转载自: EMMC的分区及其保存的文件 Partition label filename 说明 PrimaryGPT gpt_main0.bin modem NON-HLOS.bin sbl1 s ...
- 开发rsync启动脚本2
使用函数更加规范的开发rsync启动脚本 #!/bin/bash #chkconfig: #description: create by vincen . /etc/init.d/functions ...
- codeforces 686B
题意:给出一个序列,只允许进行相邻的两两交换,给出使序列变为非降序列的操作方案. 思路:关键点是操作次数不限,冒泡排序. #include<iostream> #include<cs ...
- JDK8新特性:接口的静态方法和默认方法
在jdk8之前,interface之中可以定义变量和方法,变量必须是public.static.final的,方法必须是public.abstract的.由于这些修饰符都是默认的,所以在JDK8之前, ...
- LINQ 学习路程 -- 开篇
Enumerable: Queryable:
- JavaWeb -- Servlet运行过程 和 细节
Servlet的运行过程 lServlet程序是由WEB服务器调用,web服务器收到客户端的Servlet访问请求后: ①Web服务器首先检查是否已经装载并创建了该Servlet的实例对象.如果是,则 ...
- BZOJ 1597 [Usaco2008 Mar]土地购买:斜率优化dp
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1597 题意: 有n块矩形土地,长为a[i],宽为b[i]. FJ想要将这n块土地全部买下来 ...
- webpack 教程资源目录
初级教程 webpack-howto 作者:Pete HuntWebpack 入门指迷 作者:题叶 webpack-demos 作者:ruanyf一小时包教会 —— webpack 入门指南 作者:V ...
- jsoup抓取网页内容
java项目有时候我们需要别人网页上的数据,怎么办?我们可以借助第三方架包jsou来实现,jsoup的中文文档,那怎么具体的实现呢?那就跟我一步一步来吧 最先肯定是要准备好这个第三方架包啦,下载地址, ...