subquery 子查询
- #encoding: utf-8
- from sqlalchemy import create_engine,Column,Integer,String,Float,func,and_,or_,Enum
- from sqlalchemy.ext.declarative import declarative_base
- from sqlalchemy.orm import sessionmaker
- from random import randint
- HOSTNAME = '127.0.0.1'
- PORT = 3306
- DATABASE = 'first_sqlalchemy'
- USERNAME = 'root'
- PASSWORD = ''
- #dialect+driver://username:password@host:port/database
- DB_URI = "mysql+pymysql://{username}:{password}@{host}:{port}/" \
- "{db}?charset=utf8".format(username=USERNAME,password=PASSWORD,host=HOSTNAME,port=PORT,db=DATABASE)
- engine = create_engine(DB_URI)
- Base = declarative_base(engine)
- # Session = sessionmaker(engine)
- # session = Session()
- session = sessionmaker(engine)() #Session(**local_kw)
- class User(Base):
- __tablename__ = 'user'
- id = Column(Integer,primary_key=True,autoincrement=True)
- username = Column(String(50),unique=True,nullable=False)
- city = Column(String(50),nullable=False)
- age = Column(Integer,default=0)
- # gender = Column(Enum('male','female','secret'),default='male')
- def __repr__(self):
- return "<User(username: %s)>"%self.username
- Base.metadata.drop_all()
- Base.metadata.create_all()
- user1 = User(username='小李',city='长沙',age=18)
- user2 = User(username='小王',city='长沙',age=18)
- user3 = User(username='小b',city='北京',age=18)
- user4 = User(username='小a',city='长沙',age=20)
- session.add_all([user1,user2,user3,user4])
- session.commit()
- #寻找和李A这个人在同一个城市,并且是同年龄的人
- user = session.query(User).filter(User.username=='小李').first()
- users = session.query(User).filter(User.city==user.city,User.age==user.age).all()
- print(users)
- #用原生sql子查询怎么实现
- '''
- select user.id,user.username,user.city,user.age
- from user,
- (select user.username,user.age,
- user.city from user where user.username='小李') as li_a
- where user.city = li_a.city and user.age=li_a.age;
- '''
- #sqlalchemy 提供子查询 subquery,为什么要用它,对于复杂的查询,要用到它,
- # 相比能提升效率
- #先写原生sql里面的,然后再写外面的
- #label相当于原生sql里面的as
- user_sub = session.query(User.city.label('city'),User.age.label('age')).filter(
- User.username == '小李'
- ).subquery()#这里使用子查询
- #c相当于column
- user_parent = session.query(User).\
- filter(User.age==user_sub.c.age,User.city==user_sub.c.city).all()
- print(user_parent)
- """
- SELECT user.id AS user_id, user.username AS user_username, user.city AS user_city, user.age AS user_age
- FROM user, (SELECT user.city AS city, user.age AS age
- FROM user
- WHERE user.username = %(username_1)s) AS anon_1
- WHERE user.age = anon_1.age AND user.city = anon_1.city
- """
subquery 子查询的更多相关文章
- MYSQL子查询与连接
37:子查询与连接SET 列名 gbk;//改变客户端数据表的编码类型. 子查询子查询(Subquery)是指出现在其他SQL语句内的SELECT子句例如SELECT * FROM t1 WHERE ...
- MySQL(五) —— 子查询
子查询(SubQuery)是指出现在其他SQL语句内的SELECT语句. 如: SELECT * FROM t1 WHERE col1 = (SELECT col2 FROM t2); 其中 SELE ...
- [mysql]子查询与连接
1,子查询(Subquery)是指出现在其他 SQL 语句内的select子句 例如: select * from t1 where col1 = (select col2 from t2); 其中 ...
- MySql优化子查询
用子查询语句来影响子查询中产生结果rows的数量和顺序. For example: SELECT * FROM t1 WHERE t1.column1 IN (SELECT column1 FROM ...
- [慢查优化]慎用MySQL子查询,尤其是看到DEPENDENT SUBQUERY标记时
案例梳理时间:2013-9-25 写在前面的话: 在慢查优化1和2里都反复强调过 explain 的重要性,但有时候肉眼看不出 explain 结果如何指导优化,这时候还需要有一些其他基础知识的佐助, ...
- MySQL子查询subquery
子查询(Subquery)是指出现在其他SQL语句内的SELECT子句. 例如: select * from t1 where col1=(select col2 from t2); 其中select ...
- MySQL子查询(SubQuery)
由比较运算符引发的子查询,若括号内的子查询结果为多个,要在括号前加上ANY/SOME/ALL 由[NOT]IN引发的子查询, =ANY与IN等效 !=ALL / <>ALL与N ...
- SQL系列(九)—— 子查询(subQuery)
1.子查询 前面的系列介绍的都是简单的查询场景,其中都只涉及到单张表的数据检索.但是在日常是实际应用中,数据模型之间的关系都非常的复杂,数据的需求一般都是来源于多个数据模型之间的组合而成,即对应多张表 ...
- 深入理解MySql子查询IN的执行和优化
IN为什么慢? 在应用程序中使用子查询后,SQL语句的查询性能变得非常糟糕.例如: SELECT driver_id FROM driver where driver_id in (SELECT dr ...
随机推荐
- [人物存档]【AI少女】【捏脸数据】1222今日份的推荐
AISChaF_20191030183624290.png
- Spring 初探(一) IoC 图集
Spring 框架总体结构 IoC 直观 Spring IoC容器 Spring提供两种容器类型: - BeanFactory - ApplicationContext ApplicationCont ...
- luogu 1414 又是毕业季II 约数相关
感觉好水呀~ Code: #include <cstdio> #include <algorithm> #define N 1000005 #define setIO(s) f ...
- HZOJ 20190719 那一天她离我而去(图论最小环)
这题算是这场考试里最水的一道题了吧,就是求个最小环,但之前没练过,就在考场上yy出了最短路+次短路的傻逼解法,首先是不会求次短路,其次是这显然不对呀,自己随便想想就可以反驳这种解法. 正解比较神,但是 ...
- codevs 3022 西天收费站 x
题目描述 Description 唐僧师徒四人终于发现西天就在眼前,但猴子突然发现前面有n个收费站(如来佛太可恶),在每个收费站用不同的方式要交的钱不同,输入 ...
- npm脚本编译代码
echo offset codeUrl=D:\svn\oppo_mis\OCSS_NEW\Branches\ProjectCode20190909\h5_ocssset publishUrl=D:\P ...
- Remainder Problem
F. Remainder Problem 这个其实并不难,只是看看考察有没有分块的思路 思路:用一个ans[i][j]来记录所有k=(1~5e5)中所有a[k]%i==j的和,在查询的时候可以达到复杂 ...
- 十一、spring插件
1.STS插件_ springsource-tool-suite插件各个历史版本 2.eclipse安装spring的插件 3.奇技淫巧:在spring官网上下载历史版本的spring插件,sprin ...
- Java - 自动装箱与拆箱详解
1.装箱与拆箱 装箱,将基本数据类型转为包装类型.拆箱,将包装类型转为基本数据类型. // Byte, Short, Integer, Long, Double, Float, Boolean, Ch ...
- JS遍历OCX方法
/----查看OCX组件的属性 <html> <head> <title>OCX</title> <meta http-equiv="C ...