#encoding: utf-8

from sqlalchemy import create_engine,Column,Integer,String,Float,func,and_,or_,Text,\
ForeignKey
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker,relationship
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) #父表/从表
#user/article class User(Base):
__tablename__ = 'user'
id = Column(Integer,primary_key=True,autoincrement=True)
username = Column(String(32),nullable=False) # articles = relationship("Article") #获取用户发布所有文章 class Article(Base):
__tablename__ = 'article'
id = Column(Integer,primary_key=True,autoincrement=True)
title = Column(String(50),nullable=False)
content = Column(Text,nullable=False)
uid = Column(Integer,ForeignKey('user.id',ondelete='RESTRICT'))
author = relationship('User',backref='articles') #sqlalchemy orm提供的 # Base.metadata.drop_all()
#
# Base.metadata.create_all()
#
#
# #添加数据
# user = User(username = 'xiaowu')
# session.add(user)
# session.commit()
#
# article = Article(title = '圣墟',content = '吹牛逼死坑的小说,天天吹水逼',uid = 1)
# session.add(article)
# session.commit() #现在有个需求,我要查询article表中关联user表的数据,同过uid查询
'''
article = session.query(Article).first()
uid = article.uid
user = session.query(User).get(uid) #get根据主键会对一个对象或None
print(user)
'''
#上面写法也行,但是有没有更简便的呢?
# from sqlalchemy.orm import relationship
#sqlalchemy为我们提供了 relationship article = session.query(Article).first() #获取user对象
user = article.author
print(user)
#通过author这个字段就能直接查询出User所有关联的内容
author_name = user.username
print(author_name) #我现在又另一个需求,获取用户发布的文章,该怎么做,
#首先我们要明白用户跟文章的关系,是 一对 多关系 user = session.query(User).first() article= user.articles
print(article)#获取文章对象 ,[<__main__.Article object at 0x0000021D7BA2FC18>]是列表 #获取用户发布的文件title article_title = article[0].title
print(article_title) #这时候就有疑问呢,同样是用relationship,为什么获取对象的类型却不一样,
'''
User (主表)对 Aritcle(子表) relationship 获取 aritcle的对象是列表包裹着的
而 Aritcle(子表) 对 User(主表)relationship 获取 user 的对象 就是 内存对象
要理解这种做法,就要理解一对多关系,user(用户)可以发表多篇文章,而 article(文章)
只能有一个用户发布,所以获取article的对象是列表包裹着的
''' #现在有一个需求 能不能 简化 relationship ,在子表显示
#author = relationship('User',backref='articles')
'''
backref 就是反关联的意思,反向引用,
article 通过 author 这个关键字 正向引用 user表中的字段
user 通过 articles 反向引用 article表中的字段
'''

最新文章

  1. django数据库操作和中间件
  2. PHP中类自动加载的方式
  3. React Native中的网络请求fetch和简单封装
  4. spring中配置jdbc数据源
  5. Linux Kernel本地权限提升漏洞
  6. Hdu 1059 Dividing &amp; Zoj 1149 &amp; poj 1014 Dividing(多重背包)
  7. 13-UIKit(tableviewcell贴图、手势GestureRecognizer、transform变形)
  8. dubbo源码分析(一)
  9. ABP 框架学习-01篇
  10. Linux上跑两个版本的php,5.4.45和5.3.24
  11. ava集合---LinkedList源码解析
  12. Django Push 的一些资料
  13. Catalan卡特兰数入门
  14. 【ubuntu】修改php-fpm和nginx运行用户
  15. FreeNAS-9.10虚拟机测试安装
  16. 蜻蜓特派员 Windows XP SP3 纯净终结版
  17. 传统OGG与Microservice Architecture OGG的通信
  18. Android - Android Studio 解决访问被墙的问题
  19. jq 跳转方式汇总
  20. Java Thread系列(六)volatile

热门文章

  1. Educational Codeforces Round 26 [ D. Round Subset ] [ E. Vasya&#39;s Function ] [ F. Prefix Sums ]
  2. oracle rowtype
  3. Battle ships HDU - 5093二分匹配
  4. SWPUCTF2019 | 神奇的二维码
  5. Mysql模拟故障恢复案例过程
  6. JETSON TK1 ~ 安装Cuda和OpenCV3
  7. 对iOS锁的一些研究
  8. leetcode题目10.正则表达式匹配(困难)
  9. Java内存缓存-通过Google Guava创建缓存
  10. Nginx-rtmp之配置项的管理