【Flask】Sqlalchemy join
2024-08-31 17:43:51
### join:
1. join分为left join(左外连接)和right join(右外连接)以及内连接(等值连接)。
2. 参考的网页:http://www.jb51.net/article/15386.htm
3. 在sqlalchemy中,使用join来完成内连接。在写join的时候,如果不写join的条件,那么默认将使用外键来作为条件连接。
4. query查找出来什么值,不会取决于join后面的东西,而是取决于query方法中传了什么参数。就跟原生sql中的select 后面那一个一样。
比如现在要实现一个功能,要查找所有用户,按照发表文章的数量来进行排序。示例代码如下:
# coding:utf-8
# Author: liangjun.chen from datetime import datetime
from sqlalchemy import create_engine, Column, Integer, String, DateTime, Text, ForeignKey, func from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, relationship, backref HOSTNAME = '127.0.0.1'
PORT = 3306
DATABASE = 'sqlalchemy_first'
USERNAME = 'root'
PASSWORD = '' DB_URI = 'mysql+pymysql://{username}:{password}@{host}:{port}/{dbname}?charset=utf8'.format(
username=USERNAME, password=PASSWORD, host=HOSTNAME, port=PORT, dbname=DATABASE
)
engine = create_engine(DB_URI)
Base = declarative_base(engine)
Session = sessionmaker(engine)
session = Session() # article
class Article(Base):
__tablename__ = 'article'
id = Column(Integer, primary_key=True, autoincrement=True)
title = Column(String(50), nullable=False)
create_time = Column(DateTime,nullable=False, default=datetime.now)
uid = Column(Integer, ForeignKey("user.id")) # relation 正向引用, backref反向引用
author = relationship("User", backref=backref('articles', lazy='dynamic')) def __repr__(self):
return "Article <title: {}>".format(self.title) class User(Base):
__tablename__ = 'user'
id = Column(Integer, primary_key=True, autoincrement=True)
username = Column(String(50), nullable=False) # Base.metadata.drop_all()
# Base.metadata.create_all()
#
# user1 = User(username='saber')
# user2 = User(username='slamdunk')
#
#
# for _ in xrange(1):
# article = Article(title='article{}'.format(_))
# article.author = user1
# session.add(article)
# session.commit()
#
# for _ in xrange(3):
# article = Article(title='article{}'.format(_))
# article.author = user2
# session.add(article)
# session.commit() # 找到所有用户, 按照发表文章数量进行排序 result = session.query(User.username, func.count(Article.id)).join(Article, Article.uid==User.id).group_by(User.id).order_by(func.count(Article.id).desc()).all()
print result
最新文章
- [转]搭建高可用mongodb集群(二)—— 副本集
- Tiled Map地图编辑器键盘快捷键
- ListView滑动位置精准记忆
- maven私有库配置
- 编写2个接口:InterfaceA和InterfaceB;在接口InterfaceA中有个方法void printCapitalLetter();在接口InterfaceB中有个方法void printLowercaseLetter();然 后写一个类Print实现接口InterfaceA和InterfaceB,最后再在主类E 的main方法中创建Print的对象并赋值,运行方法
- svn 终端命令
- 使用JQuery双击修改Table中Td
- 网际协议:无连接数据报交付(IPv4)
- 自适应滤波:最小均方误差滤波器(LMS、NLMS)
- Zabbix3.0部署最佳实践
- deeplearning.ai 人工智能行业大师访谈 Ruslan Salakhutdinov 听课笔记
- zookeeper安装及环境变量设置
- mstsc的事 随笔
- Thymeleaf的超链接与AJAX的跳转问题
- Linux远程登录ssh免密码配置方法(仅供参考)
- 亿级 ELK 日志平台构建部署实践
- NAT与FULL NAT的区别
- 2018.08.20 bzoj1143: [CTSC2008]祭祀river(最长反链)
- csv注入漏洞原理&;&;实战
- Cognos报表展示图片小技巧
热门文章
- 对Servlet容器的补充和一个问题的请教
- 一步步教你搭建TinyOS2.1.2开发环境
- android中TabHost和RadioGroup
- filter和find区别,元素遍历
- 【BZOJ2803】[Poi2012]Prefixuffix 结论题
- 160824、ionic添加地图站点
- linux下安装mysql问题总结(一)mysqld_safe mysqld from pid file /usr/local/mysql/data/mysql.pid ended
- Vue中watch的简单应用
- ThinkPHP的join方法
- MySQL复制(三):常见的复制任务