轻量级SQL查询生成器

sqlize的Python项目详细描述


===
sqlize
==


sqlize是一个用于python的sql查询生成器。它的主要目标是:

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

这个库主要是为使用sqlite而开发的,并且没有在测试或使用h其他数据库后端。


导入到sqlize。这些示例都是
doctested的,因此请确保它们按预期工作。

将其转换成字符串。

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


识别与python的"from`
关键字的冲突。

r/>‘select foo,bar from foo;’

t;str(sql.select('*',['foo','bar'],其中='a=?',组='foo',
…order='-bar',limit=10,offset=20))
"从foo中选择*,bar where a=?按foo order by bar desc limit 10 offset 20;'



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


>;q=sql.select()
>;>;str(q)
"select*;"
>;>;q.what='foo'
>;>;q.sets='this'
>;>;q.sets.join('other',sql.inner)
<;sqlize.builder.from object at…>;
>;>q.where='bar=?'
>;>;q.limit=2
>;>;str(q)
'从这个内部连接中选择foo other where bar=?限制2;'

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

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

>;>q=sql.select()
>;>q.where='foo=?"

>;>q.where='foo=bar'
>;>str(q)
'选择*where foo=?和酒吧=?或者foo=bar;'

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

>;>q=sql.select()
>;>q.where='foo=?'
。或"foo=bar"
<;sqlize.builder.where object at…>;
>;>str(q)
"选择*where foo=?和酒吧=?或者foo=bar;'

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

the``sets``属性由一个``sqlize.builder.from``对象表示。它有一些实用性可用于添加和联接其他表的方法:

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

>;gt;gt;q=sql.select()
>;gt;q.sets='foo'
>;>q.sets.join('bar',sql.natural)
<;sqlize.builder.from object at…>;
>;>;str(q)
'select*from foo natural join bar;'

不直接支持聚合。相反,您可以编写原始SQL。:

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

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


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


插入看起来像这样::

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

还可以指定列:

>;>;q=sql.insert('foo','?,?,"?",('foo','bar','baz'))
>>gt;str(q)
'插入foo(foo,bar,baz)值(?),??);'

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

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

替换与inse完全相同rting,但使用"replace"类来代替::

>;>;q=sql.replace('foo','?,????)
>>>str(q)
'替换为foo值(?),??);'

update查询如下::

>;>q=sql.update('foo','bar=?',BAZ=‘?’)
>>>str(q)
'更新foo set baz=?在哪里bar=?;'

第二个参数与"select()"中的"where"相同。初始化后可以对其进行修改:


>;>q=sql.update('foo',baz='?')
>>>;q.其中&;="foo=?"

>>>str(q)
'更新foo set baz=?foo=在哪里?或酒吧=?;'

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

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

>;q=sql.delete('foo','bar=?')
>>>str(q)
'从foo中删除bar=?;'

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


======


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


发送到我们的"问题跟踪者"http://github.com/outernet-project/sqlize/issues

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

推荐PyPI第三方库


热门话题
java类。getResource和ClassLoader。getSystemResource:有没有理由选择其中一个而不是另一个?   在Java中以编程方式粘贴后恢复剪贴板   Java字符串到日期没有时间   JavaSpring注释:@Component起作用,@Repository不起作用   java“addScript”在HSQL中是否有最大记录计数?   java如何将值从JDialog框返回到父JFrame?   java我的模块库的用户有没有办法访问尚未导出的类?   java javac:未找到命令   java如何解决jsoup错误:无法找到请求目标的有效证书路径   类中的java作用域变量   Java中集合实现中的arraylist add()方法不起作用   java如何使用while循环和从用户接收输入来近似Pi?   java Spring安全CSRF培训模式   在安卓系统中,如何通过在警报框外单击来限制用户?