Python:数据库操作模块SQLAlchemy

转载 2015年07月08日 10:14:26
SQLAlchemy的ORM是一个映射函数(Mapper),将Python中定义的与数据库中的建立关联,以及类的实例(instance)和表的行(row)建立关联 
查看一个类所对应的数据库表,使用__tablename__属性,例如 User.__tablename__

1. 查询数据 (query)

1.1 查询一个trace中flow个数(to count flows of specific trace)
session.query(Flow).filter(Flow.trace_id == 1).count()

1.2. 查询一个trace中不同srcIP的个数 (to count distinct srcIP)
from sqlalchemy import distinct
from config import *
session = DBSession()
session.query(Flow.srcIP).filter(Flow.trace_id == 1).distinct().count()

1.3 查询一个trace中不同的dstIP和dstPort对的个数(to count distinct dstIP and dstPort)
session.query(Flow.dstIP, Flow.dstPort).filter(Flow.trace_id == 1).distinct().count()

1.4 查询指定列的数据,返回一个KeyedTuple数据类型的列表( get a tuple list of specified columns )
n = session.query(Flow.dstIP, Flow.dstPort).filter(Flow.trace_id == 1).all()
# The type of n is list.
# The type of n[0] is sqlalchemy.util._collections.KeyedTuple

1.5 查询指定列中的所有不同值( get a distinct tuple list of specified columns)
n = session.query(Flow.dstIP, Flow.dstPort).filter(Flow.trace_id == 1).distinct().all()

1.6 获得一列数据的平均值(get average value of a column)
# sql language: select avg(txPkt) from Flow
from sqlalchemy.sql import func
q = session.query(func.avg(Flow.txPkt)).filter(Flow.trace_id == 1)
print q[0][0]
# The type of q is sqlalchemy.orm.query.Query
# The type of q[0] is sqlalchemy.util._collections.KeyedTuple
# The type of q[0][0] is decimal.Decimal

1.7 多列数据平均值的计算(compute average values of columns)
q = session.query((func.avg(Flow.txPkt)+func.avg(Flow.rxPkt))/2).filter(Flow.trace_id == 1)

1.8 对查询到的数据排序(order by )
from sqlalchemy import desc
q = session.query(Flow.timestamp).filter(trace_id == 1).order_by(desc(Flow.timestamp))

1.9 分组查询
q = session.query(Flow.dstIP, Flow.dstPort, func.count(Flow.id)).filter(Flow.trace_id == tid).group_by(Flow.dstIP, Flow.dstPort).all()

2 查询中,常用的过滤操作
等于(equals), 例如 query.filter(name  == 'Jack')
不等于(not equals), 例如 query.filter(name != 'Jack')
在列表中(in), 例如 query.filter(name.in_(['Micheal', 'Bob', 'Jack']))
不在列表中(not in), 例如query.filter(~name.in_(['Micheal', 'Bob', 'Jack']))
空值(null), 例如 query.filter(name == None)
不是空值(not null), 例如 query.filter(name != None)
与(and), 例如 query.filter(and_(name == 'Andy', fullname == 'Andy Liu' ))
and_可以省略, 例如 query.filter(name=='Andy', fullname==‘Andy Liu')
或(or), 例如 query.filter(or_(name == 'Andy', name == 'Micheal'))


2. 表的数据操作(table data operation)
2.1 添加\删除一个column ( add a new column to a table)
from db import engine
from sqlalchemy import DDL
add_column = DDL('alter table Flow add column cluster_id integer after trace_id')
drop_column = DDL('alter table Flow drop column microsecond')
engine.execute(add_column)
engine.execute(drop_column)

2.2 修改一个数据(update  a value)
session.query(Flow).filter(Flow.dstIP == dstIP, Flow.dstPort == dstPort, Flow.trace_id == 1).update({'cluster_id' : 0})

2.3 插入一行数据(insert a row)
    session = DBSession()
    cluster = Clusters(trace_id = tid, cluster_id = cid, \
                       dstIP = dIP, dstPort = dPort, \
                       avgPkt = aPkt, avgByte = aByte, \
                       size = count)
    session.add(cluster)
    session.commit() # commit or flush
    session.close()

2.4  删除一行数据(delete a row )
    session = DBSession()
    session.query(Clusters).filter(Clusters.trace_id = 2).delete()
    session.commit() # commit or flush
    session.close()

补充:
外键 ForeignKey只能引用外表的指定列中已经存在的值。

python中过滤器filter用法

#第一个参数是一个返回bool值的一般函数或lambda函数,第二个参数是一个可迭代对象#最后返回一个可迭代对象,可以通过list获得 def is_positive(item): retur...
  • u014197417
  • u014197417
  • 2017年10月10日 21:40
  • 337

关于Django ORM filter方法小结

django filter是一个过滤器,相当于SQL的select * from where。 filter返回一个QuerySet对象,还可以在该对象上继续进行django orm 该有的操作。...
  • stan_pcf
  • stan_pcf
  • 2016年07月20日 16:17
  • 357

Python学习总结笔记(10)-- MySQL数据库操作之SQLAlchemy使用总结

SQLAlchemy是一个著名的ORM框架,使用ORM操作数据库,不用去关注SQL语句本身,这样可以提高开发的效率。同时使用ORM框架虽然可以减少代码编写的消耗,但是可能也会执行很多冗余的数据库操作,...
  • kikaylee
  • kikaylee
  • 2016年12月13日 22:47
  • 3934

sqlalchemy增删各种操作

首先说下,由于最新的 0.8 版还是开发版本,因此我使用的是 0.79 版,API 也许会有些不同。 因为我是搭配 MySQL InnoDB 使用,所以使用其他数据库的也不能完全照搬本文。 接着就...
  • qq_27231343
  • qq_27231343
  • 2016年06月06日 23:05
  • 845

Python特殊语法:filter、map、reduce、lambda

Python内置了一些非常有趣但非常有用的函数,充分体现了Python的语言魅力! filter(function, sequence):对sequence中的item依次执行function(...
  • hshl1214
  • hshl1214
  • 2015年11月17日 15:38
  • 3840

Python实现简单orm

参考修改了廖雪峰老师的代码 只完成了最基本的功能 数据库连接模块import pymysql class BaseDB: def __init__(self, user, passwor...
  • yz764127031
  • yz764127031
  • 2017年08月19日 23:37
  • 128

python数据库操作SQLAlchemy

1.版本检查 import sqlalchemysqlalchemy.__version__ 2.连接 from sqlalchemy import create_engineengin...
  • weixin_39769379
  • weixin_39769379
  • 2017年11月06日 15:45
  • 53

python3.6 sqlalchemy安装与使用

python3.6 sqlalchemy安装与使用
  • b2894lxlx
  • b2894lxlx
  • 2017年03月10日 11:27
  • 991

python filter 过滤序列

Python内建的filter()函数用于过滤序列。 filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素 1.求素数的例子: ①先构造一...
  • simple1_6
  • simple1_6
  • 2018年02月11日 10:39
  • 3

python几个内置函数之-filter,map,reduce

小弟初学,在看到这几个,写在这里先。 ·filter()函数filter()函数包括两个参数,分别是function和list。该函数根据function参数返回的结果是否为真来过滤list参数中的项...
  • shark0001
  • shark0001
  • 2006年11月02日 21:57
  • 52538
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Python:数据库操作模块SQLAlchemy
举报原因:
原因补充:

(最多只允许输入30个字)