Django 是个便于新人上手的 web 项目,内置简单的 Django-ORM ,但却无法很好的对已存在的数据库进行链接,功能强大的 Sqlalchemy 又不面向新手,故小造轮子,以便的对已存在的表增删该查,其中查询语法类似 Django ORM,同时加入了方便的 join 操作。该工具支持批量操作。
功能简介
假设使用如下语法创建了两张表: users
和 addresses
CREATE TABLE users ( id INTEGER NOT NULL, name VARCHAR(50), fullname VARCHAR(50), password VARCHAR(12), PRIMARY KEY (id));CREATE TABLE addresses ( id INTEGER NOT NULL, email_address VARCHAR NOT NULL, user_id INTEGER, PRIMARY KEY (id), FOREIGN KEY(user_id) REFERENCES users (id));复制代码
你可以使用支持的 对已存在于数据库中的表进行链接并作出相应操作。
from dblink import Database, Tabledb = Database(url='sqlite:///:memory:')user_table = Table('users', db)# ...db.close()with Database(url='postgresql://scott:tiger@localhost/mydatabase') as db: address_table = Table('addresses', db) # ...复制代码
下面是一个简单的操作示例:
"""Suppose you have two table: users and addresses."""from dblink import Database, Tablewith Database('sqlite:///:memory:') as db: table_user = Table('users', db) table_address = Table('addresses', db) # show description print(table_user.description) print(table_address.description) # chain query, you can call delete on the single table result table_user.query.filter(id=1).one_or_none() table_user.query.filter(id__gte=2) \ .order_by('name') \ .values_list('id', 'name') table_user.query.filter(id__in=[1, 2, 3]) \ .filter(name__startswith='Yu').all() table_user.query.order_by('-name') \ .values_list('fullname', flat=True, distinct=True) table_user.query.distinct('name').values_list('name', flat=True) table_user.query.filter(id__in=[1, 2, 3]).delete() # join query table_user.join(table_address) \ .filter(id__lt=10000) \ .filter(email_address__contains='gmail') \ .filter(**{ 'addresses.id__gte': 100}) \ .values_list('user_id', 'name', 'email_address', table_address.id, 'users.fullname') # get or insert instance, create = table_user.get_or_insert(id=1, name='jone') # single record operation. table_user.insert({ 'id': 1, 'name': 'YuJun', 'password': 'psw'}) table_user.update({ 'id': 1, 'name': 'skyduy', 'password': 'psw'}, unique_fields=['id'], update_fields=['name', 'password']) table_user.insert_or_update( { 'id': 1, 'name': 'skyduy', 'password': 'psw'}, unique_fields=['id'], update_fields=['name', 'password'] ) table_user.delete({ 'id': 1, 'name': "I don't matter"}, unique_fields=['id']) # bulk operation items = [{ 'id': 1, 'name': 'yujun', 'password': 'haha'}, { 'id': 2, 'name': 'skyduy', 'password': 'aha'},] unique_fields = ['id'] update_fields = ['name'] table_user.bulk_insert(items) table_user.bulk_delete(items, unique_fields) table_user.bulk_update(items, unique_fields, update_fields) table_user.bulk_insert_or_update(items, unique_fields, update_fields)复制代码
安装和源码
- 直接使用 pip 安装:
pip install dblink
- 源码请戳