轻量级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
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