完全简单的RDBMS处理库
dsql的Python项目详细描述
dead简单rdbms处理库
死简单的SQL生成和结果处理库。设计用于 python db api 2兼容的数据库连接对象。
安装时使用:
pip install dsql
您可以通过两种方式使用dsql。第一种情况是生成SQL语句:
>>> from dsql import buildquery >>> buildquery('select', 'people', ['name', 'surname'], where=[{'age >': 30}], orderby='-age', dialect='postgresql') ( 'SELECT "name", "surname" FROM "people" WHERE "age" > %s ORDER BY "age" DESC', [30] )
第二个用例是创建一个manager对象,除了生成 您的语句,自动执行它们并为您处理结果:
>>> import psycopg2 >>> from psycopg2.extras import DictCursor >>> from dsql import makemanager >>> conn = psycopg2.connect(database='foo', cursor_factory=DictCursor) >>> db = dsql.makemanager(conn, dialect='postgresql') >>> itemiter = db.select('products', where=[{'color =': 'red'}]) >>> itemiter.next() { 'id': 1, 'title': 'Shirt', 'color': 'red' } >>> db.insert('products', [{'title': 'Pants', 'color': 'green'}, >>> {'title': 'Socks', 'color': 'yellow'}]) [2, 3]
注意需要配置连接以返回dictcursors 而不是标准游标,如上例所示。
查看下面的参考部分,以获取整个api的文档。
安装:
pip install dsql
引用
退房:
# Query Builder query, params = dsql.buildquery(operation, tablename, <depends-on-the-operation>, ... dialect='standard') query, params = dsql.buildquery('select', tablename, fieldlist=[], where=[], groupby=[], having=[], orderby=[], limit=0, offset=0, dialect='standard') query, params = dsql.buildquery('insert', tablename, recordlist, dialect='standard') query, params = dsql.buildquery('update', tablename, updates, where=[], orderby=[], limit=0, offset=0, dialect='standard') query, params = dsql.buildquery('delete', tablename, where=[], orderby=[], dialect='standard') query, params = dsql.buildquery('raw', query, params) # Manager db = dsql.makemanager(dbapi2_compatible_connection_object, dialect='standard') itemiter = db.select(tablename, fieldlist=[], where=[], groupby=[], having=[], orderby=[], limit=1, offset=0, commit=True, dry_run=False, response_handler=None) list_of_inserted_ids = db.insert(tablename, recordlist, commit=True, dry_run=False, response_handler=None) number_of_affected_rows = db.update(tablename, updates, where=[], orderby=[], limit=0, offset=0, commit=True, dry_run=False, response_handler=None) number_of_affected_rows = db.delete(tablename, where=[], orderby=[], commit=True, dry_run=False, response_handler=None) mixed = db.raw(query, params, commit=True, dry_run=False, response_handler=None) # return value of this one depends on the type of query. related_connection_object = db.conn
通用参数文档:
fieldlist
字段列表,如['name','age','occulation']。传递空列表,或 全部跳过,得到所有字段。
其中
条件组列表。
每个条件组都是谓词和值对的dict,例如:{name =':'约翰','年龄>;':30}。每一对都与和组合在一起,因此这个例子是 翻译成模板“name”=%s和“age”>; %s和['john',30]的值。
条件组本身与或组合,因此下面的其中 表达式:
[{'name =': 'John', 'age >': 30}, {'occupation in': ['engineer', 'artist']}]
翻译成:
WHERE ("name" = %s AND age > %s) OR (occupation IN (%s, %s))
值为:['john',30,'engineer','artist']
所有标准比较运算符以及like、not like、in和not 支持in。
如果需要构造更复杂的筛选器,请尝试原始查询。
groupby
组字段列表,如['age','occulation']
具有
与中的相同。
orderby
要排序依据的字段列表。将-前缀添加到要降序的字段名中 命令。示例:['age','-net_worth']
限制
限制为整数,例如50。
偏移量
偏移为整数,例如200。
方言
标准,PostgreSQL或MySQL。
commit
自动提交查询。如果你选择不承诺,你总能得到 来自manager对象的连接对象(通过manager.conn)并使 当时机成熟的时候,你要承诺自己。
干运行
真或假。如果为true,则不执行查询,而是将其转储到 检验的标准误差。
响应处理程序
默认情况下,manager对象为您处理响应。它返回一个 select调用的记录迭代器,insert的最后插入id的列表 调用,以及其他行的受影响行数。在你想处理的情况下 响应本身,您可以传递自己的响应处理程序 将是光标对象和当前方言。示例:
value_of_custom_handler = manager.select(tablename, limit=10, response_handler=custom_handler)
示例
带psycopg2的posgresql:
import psycopg2 import psycopg2.extras import dsql conn = psycopg2.connect(host='localhost', user='root', database='lorem', cursor_factory=psycopg2.extras.DictCursor) db = dsql.makemanager(conn, dialect='postgresql') itemiter = db.select('products', ['id', 'name', 'description']) item = itemiter.next() print item['name'] ...
mysql和mysqldb:
import MySQLdb import MySQLdb.cursors import dsql conn = MySQLdb.connect(host='localhost', user='root', db='lorem', cursorclass=MySQLdb.cursors.DictCursor) db = dsql.makemanager(conn, dialect='mysql') itemiter = db.select('products', ['id', 'name', 'description'], where=[{'status =': 'in stock'}]) item = itemiter.next() print item['name'] last_insert_ids = db.insert('products', [ { 'name': 'foo', 'description': 'what a product!', } ]) last_insert_ids = db.insert('products', [ { 'name': 'foo', 'description': 'what a product!', } ], commit=False) db.conn.commit() affected_rowcount = db.update('products', {'name': 'lorem ipsum'}, where=[{'id =': 888}]) affected_rowcount = db.delete('products', where=[{'id =': 777}])