SQLAlchemy操作MariaDB笔记之四

3 篇文章 0 订阅
2 篇文章 1 订阅

统计函数

计数

session.query(User).filter(User.name.like('%ed')).count()

分组计数

from sqlalchemy import func
session.query(func.count(User.name), User.name).group_by(User.name).all()

全部计数

session.query(func.count('*')).select_from(User).scalar()

一对多关系,外键

注意ForeignKey和relationship以及backref的用法
backref的语意为User对象可以反向索引Address对象,通过绑定的addresses属性,即user.addresses

>>> from sqlalchemy import ForeignKey
>>> from sqlalchemy.orm import relationship, backref

>>> class Address(Base):
...     __tablename__ = 'addresses'
...     id = Column(Integer, primary_key=True)
...     email_address = Column(String(100), nullable=False)
...     #指定外键,与users表的主键关联
...     user_id = Column(Integer, ForeignKey('users.id'))
...     #指定反向属性
...     user = relationship("User", backref=backref('addresses', order_by=id))
...
...     def __repr__(self):
...         return "<Address(email_address='%s')>" % self.email_address

同步数据库

Base.metadata.create_all(engine)

测试

>>> jack = User(name='jack', fullname='Jack Bean', password='gjffdd')
>>> jack.addresses
[]
>>> jack.addresses = [
...                 Address(email_address='jack@google.com'),
...                 Address(email_address='j25@yahoo.com')]
`>>> jack.addresses[1]
<Address(email_address='j25@yahoo.com')>

>>> jack.addresses[1].user
<User(name='jack', fullname='Jack Bean', password='gjffdd')>`
>>> session.add(jack)
>>> session.commit()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值