#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 子查询的更多相关文章

  1. MYSQL子查询与连接

    37:子查询与连接SET 列名 gbk;//改变客户端数据表的编码类型. 子查询子查询(Subquery)是指出现在其他SQL语句内的SELECT子句例如SELECT * FROM t1 WHERE ...

  2. MySQL(五) —— 子查询

    子查询(SubQuery)是指出现在其他SQL语句内的SELECT语句. 如: SELECT * FROM t1 WHERE col1 = (SELECT col2 FROM t2); 其中 SELE ...

  3. [mysql]子查询与连接

    1,子查询(Subquery)是指出现在其他 SQL 语句内的select子句 例如: select * from t1 where col1 = (select col2 from t2); 其中 ...

  4. MySql优化子查询

    用子查询语句来影响子查询中产生结果rows的数量和顺序. For example: SELECT * FROM t1 WHERE t1.column1 IN (SELECT column1 FROM ...

  5. [慢查优化]慎用MySQL子查询,尤其是看到DEPENDENT SUBQUERY标记时

    案例梳理时间:2013-9-25 写在前面的话: 在慢查优化1和2里都反复强调过 explain 的重要性,但有时候肉眼看不出 explain 结果如何指导优化,这时候还需要有一些其他基础知识的佐助, ...

  6. MySQL子查询subquery

    子查询(Subquery)是指出现在其他SQL语句内的SELECT子句. 例如: select * from t1 where col1=(select col2 from t2); 其中select ...

  7. MySQL子查询(SubQuery)

    由比较运算符引发的子查询,若括号内的子查询结果为多个,要在括号前加上ANY/SOME/ALL 由[NOT]IN引发的子查询, =ANY与IN等效       !=ALL / <>ALL与N ...

  8. SQL系列(九)—— 子查询(subQuery)

    1.子查询 前面的系列介绍的都是简单的查询场景,其中都只涉及到单张表的数据检索.但是在日常是实际应用中,数据模型之间的关系都非常的复杂,数据的需求一般都是来源于多个数据模型之间的组合而成,即对应多张表 ...

  9. 深入理解MySql子查询IN的执行和优化

    IN为什么慢? 在应用程序中使用子查询后,SQL语句的查询性能变得非常糟糕.例如: SELECT driver_id FROM driver where driver_id in (SELECT dr ...

随机推荐

  1. 【Android-NetWork】 判断是否连接网络,判断网络连接方式

    如何判断Android是否连接网络? Java代码: ConnectivityManager conn = (ConnectivityManager) getSystemService(Activit ...

  2. phpstorm快捷键和激活

    点击PHP中文网->PHPstorm激活, 按照步骤激活 今天遇到了不能激活的情况, your activation code could not be validated.这个解决方法是把上面 ...

  3. SQL Server代码的一种学习方法

    使用SQL Server Management Studio的操作过程中,界面上方都可以生成sql脚本代码. 如新建数据库时: CREATE DATABASE [db_New] ON PRIMARY ...

  4. 【Java Web】IDEA如何创建及配置Web项目(多图)

    正文之前 在学习Java Web时,第一个遇到的问题就是如何创建或配置Web项目了,今天,就用IntelliJ IDEA 来进行Web项目配置: 创建Web项目 配置web项目 正文 创建Web项目 ...

  5. XML -- XML基础知识

    1.XML的结构 XML的结构采用的是树结构,树结构就是一种一对多的关系结构. XML必定有一个根节点.因为,在解析这个XML时,需要有个起始位置进行遍历解析,这个跟节点就是起始位置. 2.XML的元 ...

  6. Android UI编程之自定义控件初步——ImageButton

    我想我们在使用一些App的时候,应该不会出现一些“裸控件”的吧.除非是一些系统中的软件,那是为了保持风格的一致性,做出的一些权衡.我这里并非是在指责Android原生的控件不好看,说实在的,我很喜欢A ...

  7. AcWing:164. 可达性统计(拓扑排序 + 状态压缩算法)

    给定一张N个点M条边的有向无环图,分别统计从每个点出发能够到达的点的数量. 输入格式 第一行两个整数N,M,接下来M行每行两个整数x,y,表示从x到y的一条有向边. 输出格式 输出共N行,表示每个点能 ...

  8. AJAX-基础-1

    概述 AJAX = Asynchronous JavaScript And XML(异步 JavaScript 及 XML) AJAX 是 Asynchronous JavaScript And XM ...

  9. error while loading shared libraries: libXXXX.so: cannot open shared object file: No such file or directory

    出现这个问题的原因是运行程序缺少依赖库,或者运行程序的依赖库缺少依赖库,可能你的本地目录下面就有这个库文件,但是linux搜索路劲不会从当前路径下去搜索:这种情况可能出现在切换环境上,可能你在一个li ...

  10. C++入门经典-友元

    1:在讲述类的内容时说明了隐藏数据成员的好处,但是有时类会允许一些特殊的函数直接读写其私有数据成员. 使用friend关键字可以使特定的函数或者别的类的所有成员函数对私有数据成员进行读写.这既可以保持 ...