Python全系列 教程
3567个小节阅读:5930.7k
目录
鸿蒙应用开发
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
mysql级别的外键,还不够爽,必须拿到一个表的外键,然后通过这个外键再去另外一张表中查找,这样太麻烦了。
SQLAlchemy提供了一个relationship
,这个类可以定义属性,以后在访问相关联的表的时候就直接可以通过属性访问的方式就可以访问得到了。
另外,可以通过backref
来指定反向访问的属性名称。newss是指有多篇新闻。他们之间的关系是一个“一对多”的关系
xxxxxxxxxx
from sqlalchemy import Column,Integer,String,Text,ForeignKey
from sqlalchemy.orm import relationship
from db_util import Base,Session
class User(Base):
__tablename__ = 't_user'
id = Column(Integer,primary_key=True,autoincrement=True)
uname = Column(String(50),nullable=False,name='name')
# news = relationship('News') # 不友好
def __repr__(self):
return f'<User: id={self.id} uname={self.uname}>'
# 1对多 ForeignKey的关键字要建立在 多一边
class News(Base):
__tablename__ = 't_news'
id = Column(Integer,primary_key=True,autoincrement=True)
title = Column(String(50),nullable=False)
content = Column(Text,nullable=False)
uid = Column(Integer,ForeignKey('t_user.id'))
user = relationship('User',backref='news') # 将主表的数据注入到这个字段
def __repr__(self):
return f'<News: id={self.id} title={self.title} content={self.content} uid={self.uid}>'
def create_data():
user = User(uname = 'sxt')
news1 = News(title='Python',content='flask',uid = 1)
news2 = News(title='MySQL',content='SQL',uid = 1)
with Session() as ses:
ses.add(user)
ses.commit()
with Session() as ses:
ses.add(news1)
ses.add(news2)
ses.commit()
def query_data():
with Session() as ses:
# news1 = ses.query(News).first()
# print(news1)
# select u.id u.uname from t_news n left join t_user u n.uid = u.id where n.id = 1;
news1 = ses.query(News).first()
uid = news1.uid
user = ses.query(User).first()
print(user)
def query_data2():
# 通地子表查询主表的数据
with Session() as ses:
news1 = ses.query(News).first()
print(news1.user)
def query_data3():
# 通地主表查找子表的数据
with Session() as ses:
user1 = ses.query(User).first()
print(user1.news)
if __name__ == '__main__':
# Base.metadata.create_all()
# create_data()
# query_data()
# query_data2()
query_data3()
实时学习反馈
1. 在SQLAlchemy中,对表关系说法错误的是?
A ForeignKey函数是为了建立外键关系
B relationship函数可以反向查找子表的数据
C relationship函数第一个参数反向查找需要 类名
D relationship函数第一个参数反向查找需要 表名
答案
1=>D