轻量级SQL查询生成器

sqlize-pg的Python项目详细描述


===
sqlize pg
==



-速度:因为快速是好的
-透明度:不要隐藏sql的真正本质
-易变性:我们应该能够对查询进行变异

这个库主要是为与postgresql一起使用而开发的,并且没有在测试或使用上投入任何努力使用其他数据库后端。


installation
对sqlize-pg的简要介绍。这些示例都是
doctested的,因此请放心,它们可以按预期工作。

通过将查询强制为字符串而将其查询为SQL字符串。

请注意,这些查询将与占位符值一起使用,并且**no
quoting由sqlize pg**执行。生成的SQL字符串打算与"`psycopg2.extensions.cursor.execute()`"和类似的方法一起使用。

sets='foo')

请注意,我们调用表'sets'以避免与python的'from`
关键字冲突。

>;>>str(sql.select(['foo','bar'],sets='foo'))
'select foo,bar from foo;'

>您还可以从多个表中选择::

>;>str(sql.select('*',sets=['foo','bar'])
'select*from foo,bar;'


所有常用子句都可用:

>;>;str(sql.select('*',['foo','bar'],其中'a=%s',group='foo',
…order='-bar',limit=10,offset=20))
"select*from foo,bar where a=%s group by foo order by bar desc limit 10 offset 20;'



不过,真正的威力来自这样一个事实:查询对象的每一个方面都可以进行调整。::


>;q=sql.select()
>;>str(q)
"select*;"
>;>q.what='foo'
>;>q.set='this'
>;>q.sets.join('other',sql.inner)
<;sqlize_pg.builder.from object at…>;
>;>;q.where='bar=%s'
>;>;q.limit=2
>;>;str(q)
'从此内部join选择foo other where bar=%s limit 2;'

现在让我们来看看各个子句。

其中的"where"属性由一个"sqlize"pg.builder.where"object"
表示,它支持一些方便的运算符来添加条件:

>;>q=sql.select()
>;>q.where='foo=%s'
>;>q.where&;='bar=%s'
>;>;gt;q.where='foo=bar'
>;gt;str(q)
'选择*where foo=%s and bar=%s or foo=bar;'

`&;=``和``=``具有方法别名。主要优点是方法是可链接的。上面的示例可以重写为:

>;>;q=sql.select()
>;>;q.where='foo=%s'
>;>;q.where.和_u('bar=%s')。或_u('foo=bar')
<;sqlize_pg.builder.where object at…>;
>;>;str(q)
'select*where foo=%s和bar=%s或foo=bar;'

注意下划线。我们不能使用看起来像内置
运算符的方法名。

由"sqlize"pg.builder.from"对象编辑。它有几个实用方法可用于添加和联接其他表:

>;>;q=sql.select()
>;>;q.sets='foo'
>;>;q.sets.append('bar')
<;sqlize_pg.builder.from object at…>;
>;>;str(q)
select*from foo,bar;'

>;>q=sql.select()
>;>q.sets='foo'
>;>q.sets.join('bar',sql.natural)
<;sqlize_pg.builder.from object at…>;
>;>str(q)
'从foo natural join bar中选择*直接支持聚合。相反,您可以编写原始SQL。:

>;>q=SQL。选择('count(*)作为count,设置为'foo',group='bar')
>;>str(q)
'选择count(*)作为count from foo group by bar;'

这是有意的。我们希望sqlize pg尽可能符合sql,而不是
妨碍您的工作。


除了选择之外,sqlize pg还支持插入、更新、删除和
替换。


insert s看起来像这样::

>;q=sql.insert('foo','%s,%s')
>;str(q)
'插入foo值(%s、%s、%s);'

>还可以指定列::

>;>q=sql.insert('foo',%s、%s、%s',('foo','bar','baz')
>;>str(q)
'插入foo(foo,bar,baz)值(%s、%s、%s);'

如果省略这些值,则查询将包含命名占位符::

>;>;q=sql.insert('foo',cols=('foo','bar','baz'))
>;>;str(q)
'insert into foo(foo,bar,baz)values(:foo,:bar,:baz);'

替换与插入类似,但改用"replace"类:

>;>;q=sql.replace('foo',constraints=['id',cols=['id',name'])
>;>;str(q)
'插入foo(id,name)值中(%(id)s,%(name)s)on conflict(id)do update set id=%(id)s,name=%(name)s;'

update查询如下::

>;>q=sql.update('foo','bar=%s',baz=%s')
>;>str(q)
'update foo set baz=%s where bar=%s;'

初始化后可以对其进行
修改:

>;>q=sql.update('foo',baz='%s')
>;>q.where&;="foo=%s"
>;>q.where='bar=%s'
>;>str(q)
'update foo set baz=%s where foo=%s或bar=%s;'

传递给``update()``的任何关键字参数都将转换为``set`
子句。

使用``delete()``类可以完成删除行。:

>;q=sql.delete('foo',bar=%s')
>;str(q)
"delete from foo where bar=%s;"

与"update()"一样,第二个参数是"where"子句,可以对其进行
操作。


======


不幸的是,除了介绍之外,目前没有其他文档。不过,我希望
代码库不太难遵循,所以如果你等不及,您可以查看源文件。


https://github.com/outernet-project/sqlize-pg/issues/问题

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Selenium运行ChromeDriver而不修改路径   java软件包sun。网www.protocol。https不可见   java AEM中的哪个类实现了javax。servlet。请求调度器接口?   在java/scala中读取zip或7z文件时的性能问题   java将一个文件写入另一个二进制文件   java在类本身中创建实例   Java中C#Action()委托的等价物?   java如何在任何类中使用@Context或类似工具获取ServletRequest?   重构(java)应该/如何重构此代码?   hibernate中的java TransientObject异常   gwt使用Java在CouchDB 2.0 fauxton中创建文档   xml错误Java Jersey:NotAuthorizedException:HTTP 401未经授权   java heroku错误:无法找到或加载主类   java从CAS 5.0检索已发布的属性。Spring Security中的x 3.2.5