SQLAlchemy中表结构的一对多

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import pymysql
pymysql.install_as_MySQLdb()

app = Flask(__name__)
# 连接数据库
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql://root:[email protected]:3306/flask"
# 采用自动提交方式
app.config["SQLALCHEMY_COMMIT_ON_TEARDOWN"] = True
db = SQLAlchemy(app)

class LOL(db.Model):
    # 创建表名为
    __tablename__ = "lol"
    # 创建字段
    id = db.Column(db.Integer, primary_key=True)
    lname = db.Column(db.String(30), nullable=False)
    # 增加关联属性以及反向引用属性
    # 这里一对一是uselist = False,这里的是lazy
    data = db.relationship("DOTA2", backref="lol", lazy="dynamic")

    def __init__(self, lname):
        self.lname = lname

    def __repr__(self):
        return "<LOL:%r>" % self.lname

class DOTA2(db.Model):
    __tablename__ = "dota2"
    id = db.Column(db.Integer, primary_key=True)
    dname = db.Column(db.String(30))
    # 增加一个列(外键):表示引用自LOL表的外键
    lol_id = db.Column(db.Integer, db.ForeignKey("lol.id"))

    def __init__(self, dname):
        self.dname = dname

    def __repr__(self):
        return "<DOTA2:%r>" % self.dname

db.create_all()

@app.route(‘/‘)
def hello_world():
    return ‘Hello World!‘

@app.route(‘/lol‘)
def lol_view():
    loldata = LOL("三只手")
    db.session.add(loldata)
    print(db.session.query(LOL).all())
    return "OK"

@app.route("/dota2")
def dota2_view():
    dota2data = DOTA2("电棍")
    lol = db.session.query(LOL).filter(LOL.id==3).first()
    dota2data.lol_id = lol.id
    db.session.add(dota2data)
    print(db.session.query(DOTA2).all())
    return "OK"

@app.route(‘/query‘)
def query_view():
    # 正向关联查找,由于是一对多,因此查询到要查找的“一”,然后在利用正向关联,获取到dota2表中的“多”
    # 返回一个对象
    lol = LOL.query.filter_by(id=2).first()
    print(lol)
    dotas = lol.data.all()
    for dota in dotas:
        print("lol:%s,dota2:%s" % (lol.lname, dota.dname))

    # 反向关联查找,利用外键字段的一个值,将所有符合的英雄取出来,由于是把所有对象放在一个列表,因此进行循环遍历
    # dota2s = DOTA2.query.filter_by(lol_id=2).all()
    # for dota2 in dota2s:
    #     # 利用对象调用反向关联属性,得到lol表中关联对象,因此再取值
    #     data = dota2.lol
    #     print("lol:%s,dota2:%s" % (data.lname, dota2.dname))
    return "OK"

if __name__ == ‘__main__‘:
    app.run(debug=True)

输出结果:

lol:EZ,dota2:小黑
lol:EZ,dota2:风行者

原文地址:https://www.cnblogs.com/zengsf/p/9900144.html

时间: 2024-08-04 04:27:28

SQLAlchemy中表结构的一对多的相关文章

SQLAlchemy中表结构的一对一

1.先创建两个数据库类,例如创建LOL与DATA2这两个类 LOL表为主表 class LOL(db.Model): __tablename__ = "lol" id = db.Column(db.Integer, primary_key=True) lname = db.Column(db.String(30), nullable=False) # 增加关联属性以及反向引用属性 data = db.relationship("DOTA2", backref = &

SQLAlchemy 增删改查 一对多 多对多

安装介绍 创建 增删改查相关操作 高级版查询操作 高级版更新操作 扩展内容 安装介绍 - SQLAlchemy 是Python的一款Orm框架 创建 from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String #创建基类,相当于Django中的 models.Model,被各个数

SQLAlchemy增删改查 一对多 多对多

一.前言: Python的ORM框架SQLAlchemy有些人相信也听过这个框架的大名了,也听说了SQLAlchemy没有Django的Models好用 我这里辟谣一下:Models仅仅只是配置和使用比较简单,因为他是Django自带的ORM框架,也正是因为Django原生的,所以兼容性远远不如SQLAlchemy,真正算的上全面的ORM框架必然是我们SQLAlchemy ORM框架,它可以在 任何使用SQL查询时使用,当然了,无论是使用什么ORM框架,都是为了方便不熟练数据库的同志们使用的,我

PL/SQL Developer中表结构、表数据的导出和导入

导出表结构: Tools(工具)-->Export User Objects(导出用户对象) -->选择要导出的表(包括Sequence等)-->.sql文件,导出的都为sql文件 导出表数据: Tools(工具)-->Export Tables(导出表)-->选择表,选择SQL Inserts(SQL 插入)-->.sql文件 导入表结构: 执行刚刚导出的sql文件,记住要删掉table前的用户名,比如以前这表名为sys.tablename,必须删除sys 导入表数据

在线批量修改mysql中表结构

1.获取要修改的表的表名称登录mysql库,查询出所有表 show tables; 将需要修改表结构的表名称存放到b.txt文件中2.执行修改修改表引擎为InnoDB for i in `cat b.txt`;do /usr/local/percona-toolkit/bin/pt-online-schema-change --user=root --password=123456 --host=localhost --charset=utf8 --alter="ENGINE=InnoDB&qu

Oracle读取库中表结构

(学习记录) 代码中Table类与Field类请参照:http://meijia.blog.51cto.com/8684191/1563874 可参考api调整相关参数. (同样注意格式) 1. 方法如下 public List<Table> export() { List<Table> tableList = new ArrayList<Table>(); Connection conn = DBUtil.getConnection(); ResultSet tabl

liferay修改service.xml 中表结构后,数据库中表不发生改变

启动tomcat时,console报错: com.liferay.portal.OldServiceComponentException: Build namespace IEVENTS has build number 444 which is newer than 438. 这是因为每次build service时,会在service.properties文件中修改build.number,这个number会随着build service次数的增加而增加. 因此修改方法为,找到对应的serv

SQLAlchemy 教程 —— 基础入门篇

SQLAlchemy 教程 -- 基础入门篇 一.课程简介 1.1 实验内容 本课程带领大家使用 SQLAlchemy 连接 MySQL 数据库,创建一个博客应用所需要的数据表,并介绍了使用 SQLAlchemy 进行简单了 CURD 操作及使用 Faker 生成测试数据. 1.2课程知识点 学会用 SQLALchemy 连接数据库(MySQL, SQLite, PostgreSQL), 创建数据表: 掌握表数据之间一对一,一对多及多对多的关系并能转化为对应 SQLAlchemy 描述: 掌握使

用 Flask 来写个轻博客 (8) — (M)VC_Alembic 管理数据库结构的升级和降级

目录 目录 前文列表 扩展阅读 Alembic 查看指令 manager db 的可用选项 初始化 DB Migrate 开始第一次跟踪 将记录文件应用到数据库中实时升级数据库结构 回滚到某一个记录环境中 前文列表 用 Flask 来写个轻博客 (1) - 创建项目 用 Flask 来写个轻博客 (2) - Hello World! 用 Flask 来写个轻博客 (3) - (M)VC_连接 MySQL 和 SQLAlchemy 用 Flask 来写个轻博客 (4) - (M)VC_创建数据模型