sqlalchemy 小试
# -*- 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 小试的更多相关文章
- sqlalchemy学习
		
sqlalchemy官网API参考 原文作为一个Pythoner,不会SQLAlchemy都不好意思跟同行打招呼! #作者:笑虎 #链接:https://zhuanlan.zhihu.com/p/23 ...
 - 小试ASP.NET MVC——一个邀请页面的实现
		
上篇博客我们大体介绍了ASP.NET MVC以及如何去新建项目,这篇博客我们讲点干货.小试ASP.NET MVC,我们来写一个简单的邀请WEB. 先来建立一个Models,叫GuestResponse ...
 - tornado+sqlalchemy+celery,数据库连接消耗在哪里
		
随着公司业务的发展,网站的日活数也逐渐增多,以前只需要考虑将所需要的功能实现就行了,当日活越来越大的时候,就需要考虑对服务器的资源使用消耗情况有一个清楚的认知. 最近老是发现数据库的连接数如果 ...
 - 冰冻三尺非一日之寒-mysql(orm/sqlalchemy)
		
第十二章 mysql ORM介绍 2.sqlalchemy基本使用 ORM介绍: orm英文全称object relational mapping,就是对象映射关系程序,简单来说我们类似pyt ...
 - Python 【第六章】:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy
		
Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...
 - SQLAlchemy(一)
		
说明 SQLAlchemy只是一个翻译的过程,我们通过类来操作数据库,他会将我们的对应数据转换成SQL语句. 运用ORM创建表 #!/usr/bin/env python #! -*- coding: ...
 - sqlalchemy(二)高级用法
		
sqlalchemy(二)高级用法 本文将介绍sqlalchemy的高级用法. 外键以及relationship 首先创建数据库,在这里一个user对应多个address,因此需要在address上增 ...
 - sqlalchemy(一)基本操作
		
sqlalchemy(一)基本操作 sqlalchemy采用简单的Python语言,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型. 安装 需要安装MySQLdb pip install ...
 - python SQLAlchemy
		
这里我们记录几个python SQLAlchemy的使用例子: 如何对一个字段进行自增操作 user = session.query(User).with_lockmode('update').get ...
 
随机推荐
- 亚马逊IOT-SDK,线程池数
			
1111
 - java实现的加密解密
			
void encode(File enfile, File defile) throws Exception { String Algorithm = "DES"; byte[] ...
 - PHP Fatal error: Uncaught ErrorException: preg_match_all (): JIT compilation failed: no more memory in phar
			
PHP 升级到 7.3 后,出现 BUG: 解决办法:修改php.ini文件,;pcre.jit=1 => pcre.jit=0
 - elasticsearch6.0.0源码导入到idea总结
			
由于elasticsearch使用了gradle管理依赖,进行构建,再加上对gradle没有接触过. 因此,导入到idea中遇到问题非常多.这里大致罗列下并说明解决方法. 环境背景 gradle版本: ...
 - nodejs+mysql入门实例(链接到数据库)
			
//连接数据库 var mysql = require('mysql'); var connection = mysql.createConnection({ host: '******', //数据 ...
 - 服务器--apache启用多个端口的方法
			
apache启用多个端口的方法 使用本地ip:端口号,或者修改hosts文件+域名的方法来进行本地多站点web调试. 注意这里是用apache 不是iis 1.安装好AppServ2.5.9软件 官网 ...
 - Android -- GreenDao3.2的简单使用
			
1,最近看了一篇文章关于GreenDao的文章 ,感觉使用这个操作数据库还是很好用的,帮我们省了不少的查询代码,今天就和大家一起来简单的使用一下吧.首先这是官网地址:https://github.co ...
 - Lua用table模拟二维数组
			
local array = {}; , , , , } , , , , } local row3 = {"I", "love", "lua" ...
 - 计算属性(computed)、方法(methods)和侦听属性(watch)的区别与使用场景
			
1,computed 能实现的,methods 肯定也能够实现. 2,不同之处在于,computed 是基于他的依赖进行缓存的,computed 只有在他的的相关依赖发生改变的时候才会重新计算. 如果 ...
 - cvc-complex-type.3.2.2: 元素 'constructor-arg' 中不允许出现属性 'name'
			
将版本号改成 3.0 以上的即可.