博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[开源] 使用 Python 轻松操作已存在的表
阅读量:7209 次
发布时间:2019-06-29

本文共 3069 字,大约阅读时间需要 10 分钟。

Django 是个便于新人上手的 web 项目,内置简单的 Django-ORM ,但却无法很好的对已存在的数据库进行链接,功能强大的 Sqlalchemy 又不面向新手,故小造轮子,以便的对已存在的表增删该查,其中查询语法类似 Django ORM,同时加入了方便的 join 操作。该工具支持批量操作。

功能简介

假设使用如下语法创建了两张表: usersaddresses

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
  • 源码请戳

转载地址:http://kuwym.baihongyu.com/

你可能感兴趣的文章
EBS后台取消死锁检查代码和取消死锁会话步骤---经验
查看>>
[置顶] Gridview中弹出层前台取值避免了刷新,easyui+Jquery
查看>>
Oracle BIEE11G --- ADF_IFRAME
查看>>
Java 连接数据库
查看>>
部分 TCP 参数简介
查看>>
[转]java annotation 手册
查看>>
不安装oracle客户端也可以使用pl/sql developer
查看>>
4、在Shell程序中的使用变量
查看>>
AndroidのListView之滑动列表项(点击事件和滑动事件共存)
查看>>
pygtk手记(1)
查看>>
YOUYOU深入学习Ganglia之三(gmetad的软件架构)
查看>>
poj1483 It's not a Bug, It's a Feature!
查看>>
ESET Smart Security 6 – 免费60天(SG)
查看>>
Coursera Machine Leaning 课程总结
查看>>
js 控制div 显示隐藏的问题
查看>>
execute、executeQuery和executeUpdate之间的区别
查看>>
类继承已经过时了
查看>>
Objective-C在windows开发环境的搭建
查看>>
用正则表达式提取字符串中的字符(包含数字)
查看>>
Ubuntu 12.04 LTS(64 bit) + RTL8188CU无线网卡驱动
查看>>