跳转到主要内容

面向人类的DB API 2.0

项目描述

为什么?

DB API 2.0 可以工作。ORM很有用,但有时过于冗余。《sql》是一个轻量级包装器,位于任何DB API 2.0连接之上,提供类似 postgres 的接口,使得处理SQL结果变得愉快。

如何?

>>> import sqlite3
>>> connection = sqlite3.connect(':memory:')
>>> import sql
>>> bliss = sql.SQL(connection)

运行

运行 是当您想要运行一个查询但不关心结果时使用的方法,例如创建一个表

>>> bliss.run("CREATE TABLE contributors (firstname VARCHAR, lastname VARCHAR)") #doctest: +ELLIPSIS
<sql.SQL object ...>
>>> bliss.run("INSERT INTO contributors VALUES (?, ?)", [('Andrew', 'Kuchling'),
...                                                      ('James', 'Henstridge'),
...                                                      ('Daniele', 'Varrazzo'),
...                                                      ('Marc-Andre', 'Lemburg')]) #doctest: +ELLIPSIS
<sql.SQL object ...>

到目前为止,没有什么令人印象深刻,创建一个游标并调用executemany就能达到相同的结果。

提交

添加于版本 2022.4.0

>>> bliss.run("INSERT INTO contributors VALUES (?, ?)", ("Chad", "Whitacre")) #doctest: +ELLIPSIS
<sql.SQL object ...>
>>> bliss.commit()

仅仅因为它比 bliss.connection.commit()

运行 返回self,因此 提交 可以链式调用

>>> bliss.run("INSERT INTO contributors VALUES (?, ?)", ("Guido", "van Rossum")).commit()

一个

一个 是当您知道结果是单行或只关心一行时使用的方法。

>>> bliss.one("SELECT firstname FROM contributors WHERE lastname='Lemburg'") # doctest: +SKIP
u'Marc-Andre'

这只是字符串,在我眼里胜过

>>> cursor = connection.cursor()
>>> cursor.execute("SELECT firstname FROM contributors WHERE lastname='Lemburg'") # doctest: +ELLIPSIS
<sqlite3.Cursor object at ...>
>>> cursor.fetchone() # doctest: +SKIP
(u'Marc-Andre',)

更好的是,如果结果包含多个列,一个 返回一个 namedtuple

>>> bliss.one("SELECT * FROM contributors WHERE firstname='James'") # doctest: +SKIP
Record(firstname=u'James', lastname=u'Henstridge')

所有

所有 是用于检索查询中所有行的方法。

>>> bliss.all("SELECT firstname FROM contributors") #doctest: +SKIP
[u'Andrew', u'James', u'Daniele', u'Marc-Andre']

当适用时返回名为tuples的列表

>>> bliss.all("SELECT firstname, LENGTH(lastname) AS length FROM contributors") # doctest: +NORMALIZE_WHITESPACE +SKIP
[Record(firstname=u'Andrew', length=8),
 Record(firstname=u'James', length=10),
 Record(firstname=u'Daniele', length=8),
 Record(firstname=u'Marc-Andre', length=7)]

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分发

sql-2022.4.0.tar.gz (4.2 kB 查看哈希值)

上传时间: 源码

支持者