SQLAlchemy的relationship

2023-11-21 08:20
文章标签 sqlalchemy relationship

本文主要是介绍SQLAlchemy的relationship,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

relationship函数是sqlalchemy对关系之间提供的一种便利的调用方式, backref参数则对关系提供反向引用的声明

1 背景

如没有relationship,我们只能像下面这样调用关系数据

 

 

如果在User中使用relationship定义addresses属性的话,

addresses = relationship('Address')
则我们可以直接在User对象中通过addresses属性获得指定用户的所有地址

 

 

2 backref属性

 

 

大致原理应该就是sqlalchemy在运行时对Address对象动态的设置了一个指向所属User对象的属性,这样就能在实际开发中使逻辑关系更加清晰,代码更加简洁了


2 例子

>>> from sqlalchemy import Column, Integer, String
>>> class User(Base):
...     __tablename__ = 'users'
...
...     id = Column(Integer, primary_key=True)
...     name = Column(String)
...     fullname = Column(String)
...     password = Column(String)
...
...     def __repr__(self):
...        return "<User(name='%s', fullname='%s', password='%s')>" % ( self.name, self.fullname, self.password)
>>> from sqlalchemy import ForeignKey
>>> from sqlalchemy.orm import relationship, backref>>> class Address(Base):
...     __tablename__ = 'addresses'
...     id = Column(Integer, primary_key=True)
...     email_address = Column(String, nullable=False)
...     user_id = Column(Integer, ForeignKey('users.id'))
...
...     user = relationship("User", backref=backref('addresses', order_by=id))
...
...     def __repr__(self):
...         return "<Address(email_address='%s')>" % self.email_addressForeignKey表示,Addresses.user_id列的值应该等于users.id列中的值,即,users的主键
relationship(), 它告诉 ORM ,Address类本身应该使用属性Address.user链接到User类
relationship()的参数中有一个称为backref()的relationship()的子函数,反向提供详细的信息, 即在users中添加User对应的Address对象的集合,保存在User.addresses中
两个互补关系, Address.userUser.addresses被称为一个双向关系,并且这是SQLAlchemy ORM的一个关键特性

这篇关于SQLAlchemy的relationship的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/401086

相关文章

掌握SQLAlchemy:Python数据库的魔法师

文章目录 掌握SQLAlchemy:Python数据库的魔法师背景:为什么选择SQLAlchemy?SQLAlchemy是什么?如何安装SQLAlchemy?五个简单的库函数使用方法1. 创建引擎2. 定义模型3. 创建会话4. 添加数据5. 查询数据 场景应用1. 多表查询2. 复杂查询3. 事务管理 常见Bug及解决方案1. 连接问题2. 外键约束问题3. 会话未提交 总结

Python操作数据库的ORM框架SQLAlchemy快速入门教程

连接内存版SQLIte from sqlalchemy import create_engineengine = create_engine('sqlite:///:memory:')print(engine) 连接文件版SQLite from sqlalchemy import create_engineengine = create_engine('sqlite:///sqlite3.

【Python系列】SQLAlchemy 基本介绍

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 java 核心技术,jvm,并发编程 redis,kafka,Spring,微服务等常用开发工具系列:常用的开发工具,IDEA,M

Flask---flask_sqlalchemy源码分析

基本使用源码分析 基本使用 安装 pip3 install flask_sqlalchemy 我们在使用时候,会执行如下的代码 db = SQLAlchemy()app = Flask(__name__)db.init_app(app) 然后models from sqlalchemy.ext.declarative import declarative_

Flask---flask-script、flask-sqlalchemy、flask_migrate、多app应用

flask-script使用flask_sqlalchemy使用flask_migrate使用多app应用 flask-script使用 1、入口文件manage.py manage.py from s8day130_pro import create_appfrom flask_script import Managerfrom flask_script

python---sqlalchemy(二)

多对一多对多原生语句 多对一 #!/usr/bin/env python# -*- coding:utf-8 -*-import timeimport threadingfrom sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy import Column, Integer, Str

python---sqlalchemy(一)

执行原生SQL语句创建删除表操作数据库表scoped_session增删改查其他 执行原生SQL语句 import timeimport threadingimport sqlalchemyfrom sqlalchemy import create_enginefrom sqlalchemy.engine.base import Engineengine =

python操作mysql的orm框架SQLAlchemy

ORM提供了一种持久化模式, 可以高效地对数据库进行访问。 ORM 的英文是 Object Relation Mapping,对象关系映射,是 RDBMS 和业务实体对象之间的一个映射,把底层的 RDBMS 封装成业务实体对象,提供给业务逻辑层使用。 SQLALchemy 它提供了 SQL 工具包及 ORM工具,支持 ORM 和支持原生SQL; 使用 SQLAlchemy 来操作 My

flask SQLALchemy的使用

1、使用SQLAlchemy去连接数据库 使用SQLALchemy去连接数据库,需要使用一些配置信息,然后将他们组合成满足条件的字符串: HOSTNAME = '127.0.0.1'PORT = '3306'DATABASE = 'first_sqlalchemy'USERNAME = 'root'PASSWORD = 'root'# dialect+driver://username

使用python基于fastapi发布接口(三)-操作数据库使用SQLAlchemy

首先需要安装SQLAlchemy pip install sqlalchemy 这里使用的是mysql,所以需要安装pymysql pip install pymysql 创建项目 创建文件夹 sql_fastapi_demo新建__init__.py文件 # __init__.py#这只是一个空文件,但它告诉 Python 所在文件夹 是一个包。 创建databa