1. #encoding: utf-8
  2.  
  3. from sqlalchemy import create_engine,Column,Integer,String,Float,func,and_,or_,Enum
  4. from sqlalchemy.ext.declarative import declarative_base
  5. from sqlalchemy.orm import sessionmaker
  6. from random import randint
  7.  
  8. HOSTNAME = '127.0.0.1'
  9.  
  10. PORT = 3306
  11.  
  12. DATABASE = 'first_sqlalchemy'
  13.  
  14. USERNAME = 'root'
  15.  
  16. PASSWORD = ''
  17.  
  18. #dialect+driver://username:password@host:port/database
  19. DB_URI = "mysql+pymysql://{username}:{password}@{host}:{port}/" \
  20. "{db}?charset=utf8".format(username=USERNAME,password=PASSWORD,host=HOSTNAME,port=PORT,db=DATABASE)
  21.  
  22. engine = create_engine(DB_URI)
  23.  
  24. Base = declarative_base(engine)
  25.  
  26. # Session = sessionmaker(engine)
  27. # session = Session()
  28.  
  29. session = sessionmaker(engine)() #Session(**local_kw)
  30.  
  31. class User(Base):
  32. __tablename__ = 'user'
  33. id = Column(Integer,primary_key=True,autoincrement=True)
  34. username = Column(String(50),unique=True,nullable=False)
  35. city = Column(String(50),nullable=False)
  36. age = Column(Integer,default=0)
  37. # gender = Column(Enum('male','female','secret'),default='male')
  38.  
  39. def __repr__(self):
  40. return "<User(username: %s)>"%self.username
  41.  
  42. Base.metadata.drop_all()
  43.  
  44. Base.metadata.create_all()
  45.  
  46. user1 = User(username='小李',city='长沙',age=18)
  47. user2 = User(username='小王',city='长沙',age=18)
  48. user3 = User(username='小b',city='北京',age=18)
  49. user4 = User(username='小a',city='长沙',age=20)
  50.  
  51. session.add_all([user1,user2,user3,user4])
  52. session.commit()
  53.  
  54. #寻找和李A这个人在同一个城市,并且是同年龄的人
  55. user = session.query(User).filter(User.username=='小李').first()
  56. users = session.query(User).filter(User.city==user.city,User.age==user.age).all()
  57. print(users)
  58.  
  59. #用原生sql子查询怎么实现
  60. '''
  61. select user.id,user.username,user.city,user.age
  62. from user,
  63. (select user.username,user.age,
  64. user.city from user where user.username='小李') as li_a
  65. where user.city = li_a.city and user.age=li_a.age;
  66. '''
  67.  
  68. #sqlalchemy 提供子查询 subquery,为什么要用它,对于复杂的查询,要用到它,
  69. # 相比能提升效率
  70. #先写原生sql里面的,然后再写外面的
  71. #label相当于原生sql里面的as
  72. user_sub = session.query(User.city.label('city'),User.age.label('age')).filter(
  73. User.username == '小李'
  74. ).subquery()#这里使用子查询
  75. #c相当于column
  76. user_parent = session.query(User).\
  77. filter(User.age==user_sub.c.age,User.city==user_sub.c.city).all()
  78. print(user_parent)
  79.  
  80. """
  81. SELECT user.id AS user_id, user.username AS user_username, user.city AS user_city, user.age AS user_age
  82. FROM user, (SELECT user.city AS city, user.age AS age
  83. FROM user
  84. WHERE user.username = %(username_1)s) AS anon_1
  85. WHERE user.age = anon_1.age AND user.city = anon_1.city
  86. """

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. 归并排序java代码

    //归并排序 通过测试 public class MergeSortTest{ public static void mergeSort(int[] data,int low,int high){ i ...

  2. 在jquery中,使用ajax上传文件和文本

    function onSubmit (data) { //获取文本 var callingContent = $('#callingContent').val() // 获取文件 var files ...

  3. Vue:选中商品规格改变字体和边框颜色(默认选中第一种规格)

    效果图: CSS: <div class="label"> <p>标签类别</p> <ul> <li v-for=" ...

  4. Servlet中的请求转发RequestDispatcher接口的forword与Include的区别

    RequestDispatcher接口中具有两个方法: forward() 与 include() 均 可完成请求 的转发.区别如下: forword(): 使用该方法,则当前 的 Servlet 中 ...

  5. nodeJS环境搭建

    1. Node.js是什么 1.1 Node.js是一个基于Chrome V8引擎的[JavaScript运行环境]. Node.js使用了一个事件驱动.非阻塞式I/O 的模型. 1.2 Node.j ...

  6. BFS解决九宫重排问题

    问题 1426: [蓝桥杯][历届试题]九宫重排 时间限制: 1Sec 内存限制: 128MB 提交: 215 解决: 47 题目描述 如下面第一个图的九宫格中,放着  1~8  的数字卡片,还有一个 ...

  7. TTTTTTTTTTTTTT CF 95 B 构造4,7幸运数字 贪心 构造 string

    B. Lucky Numbers time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...

  8. Trie树(c++实现)——转载自jihite的博客

    Trie树(c++实现)   原理 先看个例子,存储字符串abc.ab.abm.abcde.pm可以利用以下方式存储 上边就是Trie树的基本原理:利用字串的公共前缀来节省存储空间,最大限度的减少无谓 ...

  9. 性能指标:TPS 并发数 响应时间 QPS

    响应时间(RT)reponse time指系统对请求作出响应的时间.一般关注平均响应时间和最大响应时间.对于单机没有并发操作的应用系统而言,普遍认为响应时间是一个合理且准确的性能指标,但响应时间并不能 ...

  10. 统计mysql某个数据库的表数量以及表记录数

        统计MySQL中某个数据库中有多少张表 SELECT count(*) TABLES, table_schema FROM information_schema.TABLES    where ...