MoSQL的Django模型集成。
项目描述
Django MoSQL
在不涉及原始SQL危险的情况下,做Django的ORM不能做的事。
为什么?
简短版
因为我想要使用原始SQL,但又懒得考虑安全问题。
详细版
Django的ORM很酷,也很强大。但ORM注定是有漏洞的,不能做你想做的每一件事。这就是为什么Django提供了raw和extra,以便你在需要时可以自定义SQL命令。但是,力量越大,责任越大。当你使用这些方法时,你将失去Django提供的所有SQL安全措施,除非你非常小心,否则可能会成为严重的问题。
这就是MoSQL的由来。简单来说,MoSQL是一个工具,可以从Python函数调用自动生成SQL命令。它还为您处理注入防护。与Django的raw完美匹配!
这个项目所做的一切就是引入一个Django模型管理器子类,并提供一个接口,使用MoSQL的函数调用而不是自己编写SQL字符串。当然,还有一些语法糖。
我该如何使用这个工具?
(本节中的示例受Baron Schwartz的博客文章如何使用SQL选择每组的第一、最小、最大行的启发。)
假设你有一个以下模型
class Fruit(models.Model): kind = models.CharField(max_length=10) variety = models.CharField(max_length=10) price = models.FloatField()
然后您只需要提供 MoManager 作为其模型管理器之一。将 djangomosql 添加到您的 INSTALLED_APPS 中,并按照以下方式修改代码
from djangomosql.models import MoManager class Fruit(models.Model): kind = models.CharField(max_length=10) variety = models.CharField(max_length=10) price = models.FloatField() objects = MoManager()
然后您就可以生成如下查询
from djangomosql.functions import Min Fruit.objects.select((Min('price'), 'minprice')).group_by('kind').order_by('-kind')
这大致相当于
SELECT fruit.*, MIN(price) as minprice FROM fruit GROUP BY kind ORDER BY kind DESC
当然,如果我们只能做 Django ORM 能做到的事情,这就不会有多大用处。使用 Django MoSQL,您可以实现许多有趣的功能,例如
m = Fruit.objects inner = m.select((Min('price'), 'minprice')).group_by('kind') p = m.select().as_('f').order_by('f.kind').join( inner, 'x', on={'f.kind': 'x.kind', 'f.price': 'x.minprice'} )
这可以翻译成(再次,大致上)
SELECT f.* FROM fruit AS f INNER JOIN ( SELECT *, MIN(price) as minprice FROM fruit GROUP BY kind ) AS x ON f.kind = x.kind AND f.price = x.minprice
最好的是,您还可以免费获得所有转义和 ORM 映射!
许可证
BSD 3-cluse 许可证。请参阅 LICENSE 文件的内容。
开发
要运行测试,请在测试项目内部运行 python manage.py test。您还需要 django-nose 以及依赖项。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源分布
构建分布
django-mosql-0.5.1.tar.gz 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | bbc17276a46ce281b155bf65474b2476f53746e59426b0fb2ecddf8b5b84d58b |
|
MD5 | 04f4f7afaee73b9861c0b1947cd8e393 |
|
BLAKE2b-256 | 4e588821f071c94e934e9b58303210f0f4f03251f7207d24eb1e00a9803bee6d |
django_mosql-0.5.1-py3-none-any.whl 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | e1b292268312350641a77c06ea63205e6856e2f07a7b17bbd4e0ade518dcf73c |
|
MD5 | ccd773f3927a245ac58a326aa82883a8 |
|
BLAKE2b-256 | a0194c69f85a714ad62460988a0d26d889527ba9f12fb4c8223298580cdb1220 |