### 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

最新文章

  1. [转]搭建高可用mongodb集群(二)—— 副本集
  2. Tiled Map地图编辑器键盘快捷键
  3. ListView滑动位置精准记忆
  4. maven私有库配置
  5. 编写2个接口:InterfaceA和InterfaceB;在接口InterfaceA中有个方法void printCapitalLetter();在接口InterfaceB中有个方法void printLowercaseLetter();然 后写一个类Print实现接口InterfaceA和InterfaceB,最后再在主类E 的main方法中创建Print的对象并赋值,运行方法
  6. svn 终端命令
  7. 使用JQuery双击修改Table中Td
  8. 网际协议:无连接数据报交付(IPv4)
  9. 自适应滤波:最小均方误差滤波器(LMS、NLMS)
  10. Zabbix3.0部署最佳实践
  11. deeplearning.ai 人工智能行业大师访谈 Ruslan Salakhutdinov 听课笔记
  12. zookeeper安装及环境变量设置
  13. mstsc的事 随笔
  14. Thymeleaf的超链接与AJAX的跳转问题
  15. Linux远程登录ssh免密码配置方法(仅供参考)
  16. 亿级 ELK 日志平台构建部署实践
  17. NAT与FULL NAT的区别
  18. 2018.08.20 bzoj1143: [CTSC2008]祭祀river(最长反链)
  19. csv注入漏洞原理&amp;&amp;实战
  20. Cognos报表展示图片小技巧

热门文章

  1. 对Servlet容器的补充和一个问题的请教
  2. 一步步教你搭建TinyOS2.1.2开发环境
  3. android中TabHost和RadioGroup
  4. filter和find区别,元素遍历
  5. 【BZOJ2803】[Poi2012]Prefixuffix 结论题
  6. 160824、ionic添加地图站点
  7. linux下安装mysql问题总结(一)mysqld_safe mysqld from pid file /usr/local/mysql/data/mysql.pid ended
  8. Vue中watch的简单应用
  9. ThinkPHP的join方法
  10. MySQL复制(三):常见的复制任务