sqlalchemy

from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

engine = create_engine("mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8".format(user,password,host,port,db_name),echo=False)

DB_Session = sessionmaker(bind=engine)

Base = declarative_base()


class SeedOrm(Base):
    __tablename__ = 'crawl_seed_url'
    id = Column(Integer, primary_key=True,autoincrement=True)
    keyword= Column(String(32))
    province=Column(String(32))
    url = Column(String(128))
常见的SQLALCHEMY列类型.配置选项和关系选项

类型名称    python类型    描述
Integer int 常规整形,通常为32位
SmallInteger    int 短整形,通常为16位
BigInteger  int或long    精度不受限整形
Float   float   浮点数
Numeric decimal.Decimal 定点数
String  str 可变长度字符串
Text    str 可变长度字符串,适合大量文本
Unicode unicode 可变长度Unicode字符串
Boolean bool    布尔型
Date    datetime.date   日期类型
Time    datetime.time   时间类型
Interval    datetime.timedelta  时间间隔
Enum    str 字符列表
PickleType  任意Python对象  自动Pickle序列化
LargeBinary str 二进制

常见的SQLALCHEMY列选项
可选参数    描述
primary_key 如果设置为True,则为该列表的主键
unique  如果设置为True,该列不允许相同值
index   如果设置为True,为该列创建索引,查询效率会更高
nullable    如果设置为True,该列允许为空。如果设置为False,该列不允许空值
default 定义该列的默认值

#几种常见sqlalchemy查询:
#简单查询    
session=DB_Session()
print(session.query(User).all())
print(session.query(User.name, User.fullname).all())    
print(session.query(User, User.name).all())        

#带条件查询    
print(session.query(User).filter_by(name='user1').all())    
print(session.query(User).filter(User.name == "user").all())    
print(session.query(User).filter(User.name.like("user%")).all())   
print(session.query(User).filter(User.name.in_(['ed','wendy', 'jack']).all())   
uery.filter(User.name.in_(['ed','wendy', 'jack'])) 

#多条件查询    
print(session.query(User).filter(and_(User.name.like("user%"), User.fullname.like("first%"))).all())    
print(session.query(User).filter(or_(User.name.like("user%"), User.password != None)).all())        

#sql过滤    
print(session.query(User).filter("id>:id").params(id=1).all())   

#分页
print query2.limit(1).all() # 最多返回 1 条记录
print query2.offset(1).all() # 从第 2 条记录开始返回
db_session.query(HuanQiuOrm).order_by(desc(HuanQiuOrm.id)).offset((page-1)*ROWS*COLS).limit(ROWS*COLS)


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

#关联查询     
print(session.query(User, Address).filter(User.id == Address.user_id).all())    
print(session.query(User).join(User.addresses).all())    
print(session.query(User).outerjoin(User.addresses).all())        

#聚合查询    
print(session.query(User.name, func.count('*').label("user_count")).group_by(User.name).all())    
print(session.query(User.name, func.sum(User.id).label("user_id_sum")).group_by(User.name).all())        

#子查询    
stmt = session.query(Address.user_id, func.count('*').label("address_count")).group_by(Address.user_id).subquery()    
print(session.query(User, stmt.c.address_count).outerjoin((stmt, User.id == stmt.c.user_id)).order_by(User.id).all())     

#exists    
print(session.query(User).filter(exists().where(Address.user_id == User.id)))    
print(session.query(User).filter(User.addresses.any()))

限制返回字段查询
person = session.query(Person.name, Person.created_at,Person.updated_at).filter_by(name="zhongwei").order_by(Person.created_at).first()

记录总数查询:
from sqlalchemy import func


# count User records, without
# using a subquery.
session.query(func.count(User.id))


# return count of user "id" grouped
# by "name"
session.query(func.count(User.id)).\
        group_by(User.name)


from sqlalchemy import distinct
# count distinct "name" values
session.query(func.count(distinct(User.name)))
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值