# -*- coding: utf-8 -*-

from sqlalchemy import Column, String, create_engine,ForeignKey,Text,INTEGER
from sqlalchemy.orm import sessionmaker,relationship
from sqlalchemy.ext.declarative import declarative_base Base = declarative_base()
engine = create_engine('mysql+pymysql://root:root@localhost:3306/test')
DBSession = sessionmaker(bind=engine) class UserSheet(Base):
__tablename__='user'
id=Column(INTEGER,autoincrement=True,primary_key=True)
name=Column(String(32),unique=True)
books=relationship('BookSheet') detail=relationship('UserInfo',uselist=False) class BookSheet(Base):
__tablename__='book'
id = Column(INTEGER, autoincrement=True, primary_key=True)
title=Column(String(32))
author=Column(INTEGER,ForeignKey('user.id'))
# publisher=Column(String(32),ForeignKey('publisher.id')) def __str__(self):
return self.title class UserInfo(Base):
__tablename__ = 'userinfo'
id = Column(INTEGER, autoincrement=True, primary_key=True)
name=Column(INTEGER,ForeignKey('user.id'))
addr=Column(String(32)) #Base.metadata.create_all(engine) Session=DBSession() # data1=UserSheet(name='Edmond')
# Session.add(data1)
# Session.commit()
a=Session.query(UserSheet).filter(UserSheet.name=='Edmond').first()
print(a.detail.addr,'________________')
# data2=BookSheet(title='test1',author=Session.query(UserSheet.id).filter(UserSheet.name=='Edmond').first()[0])
#
# Session.add(data2)
# Session.commit()

  

注意: uselist=False 表示一对一关系.

如果没有 uselist=False, 则查询

print(a.detail.addr) 要加 print(a[0].detail.addr , 因为可能有多个结果,

  

#多表查询
print( session.query(UserDetails,User).all() ) #这个是 cross join
print( session.query(UserDetails,User).filter(User.id==UserDetails.id).all() ) #这是也是cross join 但是加上了where条件 print( session.query(User.username,UserDetails.lost_login).join(UserDetails,UserDetails.id==User.id).all() ) #这个是inner join print( session.query(User.username,UserDetails.lost_login).outerjoin(UserDetails,UserDetails.id==User.id).all() ) #这个才是左连接,sqlalchemy没有右连接 q1 = session.query(User.id)
q2 = session.query(UserDetails.id)
print(q1.union(q2).all()) #这个是union关联

  

除了上面的几种关联方式,子表查询也是用得很多的,也是要掌握的

from sqlalchemy import all_,any_
sql_0 = session.query(UserDetails.lost_login).subquery() #这是声明一个子表
print( session.query(User).filter((User.creatime > all_(sql_0)) ).all() )
print( session.query(User).filter((User.creatime > any_(sql_0)) ).all() )

  

sqlalchemy 小试的更多相关文章

  1. sqlalchemy学习

    sqlalchemy官网API参考 原文作为一个Pythoner,不会SQLAlchemy都不好意思跟同行打招呼! #作者:笑虎 #链接:https://zhuanlan.zhihu.com/p/23 ...

  2. 小试ASP.NET MVC——一个邀请页面的实现

    上篇博客我们大体介绍了ASP.NET MVC以及如何去新建项目,这篇博客我们讲点干货.小试ASP.NET MVC,我们来写一个简单的邀请WEB. 先来建立一个Models,叫GuestResponse ...

  3. tornado+sqlalchemy+celery,数据库连接消耗在哪里

    随着公司业务的发展,网站的日活数也逐渐增多,以前只需要考虑将所需要的功能实现就行了,当日活越来越大的时候,就需要考虑对服务器的资源使用消耗情况有一个清楚的认知.     最近老是发现数据库的连接数如果 ...

  4. 冰冻三尺非一日之寒-mysql(orm/sqlalchemy)

    第十二章  mysql ORM介绍    2.sqlalchemy基本使用 ORM介绍: orm英文全称object relational mapping,就是对象映射关系程序,简单来说我们类似pyt ...

  5. Python 【第六章】:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...

  6. SQLAlchemy(一)

    说明 SQLAlchemy只是一个翻译的过程,我们通过类来操作数据库,他会将我们的对应数据转换成SQL语句. 运用ORM创建表 #!/usr/bin/env python #! -*- coding: ...

  7. sqlalchemy(二)高级用法

    sqlalchemy(二)高级用法 本文将介绍sqlalchemy的高级用法. 外键以及relationship 首先创建数据库,在这里一个user对应多个address,因此需要在address上增 ...

  8. sqlalchemy(一)基本操作

    sqlalchemy(一)基本操作 sqlalchemy采用简单的Python语言,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型. 安装 需要安装MySQLdb pip install ...

  9. python SQLAlchemy

    这里我们记录几个python SQLAlchemy的使用例子: 如何对一个字段进行自增操作 user = session.query(User).with_lockmode('update').get ...

随机推荐

  1. [django]cbv方式

    cbv的方式 1.简单的url from django.views.generic import TemplateView path('', TemplateView.as_view(template ...

  2. Django-分页、中间件和请求的声明周期

    一.分页 相关连接:https://www.cnblogs.com/kongzhagen/p/6640975.html 一.Django的分页器(paginator) 1.view.py 视图 fro ...

  3. Marathon1.5以上版本配置

    今天部署marathon还按照之前的方式配置,结果启动时报错 Dec 03 23:51:36 bigdata01.zetyun.com marathon[12311]: No start hook f ...

  4. Python的Pandas库简述

    pandas 是 python 的数据分析处理库import pandas as pd 1.读取CSV.TXT文件 foodinfo = pd.read_csv("pandas_study. ...

  5. 关于事件循环机制event loop

    setTimeout(()=> { console.log('settimeout') },100) console.log('开始') console.log('结束') new Promis ...

  6. “0x00,0x08”两个十六进制字符串,转换为整形

    int m_length=0;char buf[2]=={0x00,0x08};memcpy(&m_length,&buf[0],2); m_length=m_length<&l ...

  7. C++ new运算符

    new 分配的数据类型:内置数据类型.自定义数据类型. 如果不成功,则 new 将返回零或引发异常:编写自定义异常处理例程并调用 _set_new_handler运行库函数(以您的函数名称作为其参数) ...

  8. PHP乘法表

    <?php //一行*$a="*";echo ("$a <br>"); //一行50个*for($j=1;$j<=50;$j++){ e ...

  9. Php 通过curl提交post内容为 Json的请求

    <?php $data = array("cNos" => array("1064917432615","1064917432615&qu ...

  10. C# JArray与JObject 的使用

    STEP1.using Newtonsoft.Json.Linq; STEP2 如何获取json里的某个属性(节点)值,对其删改,新增 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 ...