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:123456@localhost: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:风行者

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

  1. SQLAlchemy中表结构的一对一

    1.先导入相对应的库 from flask import Flask from flask_sqlalchemy import SQLAlchemy import pymysql pymysql.in ...

  2. 在线批量修改mysql中表结构

    在线批量修改mysql中表结构 1.获取要修改的表的表名称登录mysql库,查询出所有表 show tables; 将需要修改表结构的表名称存放到b.txt文件中2.执行修改修改表引擎为InnoDB ...

  3. 第三百零八节,Django框架,models.py模块,数据库操作——链表结构,一对多、一对一、多对多

    第三百零八节,Django框架,models.py模块,数据库操作——链表结构,一对多.一对一.多对多 链表操作 链表,就是一张表的外键字段,连接另外一张表的主键字段 一对多 models.Forei ...

  4. SQLAlchemy 增删改查 一对多 多对多

    1.创建数据表 # ORM中的数据表是什么呢? # Object Relation Mapping # Object - Table 通过 Object 去操纵数据表 # 从而引出了我们的第一步创建数 ...

  5. 13,SQLAlchemy 增删改查 一对多 多对多

    今天来聊一聊 Python 的 ORM 框架 SQLAlchemy Models 是配置和使用比较简单,因为他是Django自带的ORM框架,也正是因为是Django原生的,所以兼容性远远不如SQLA ...

  6. 六 Django框架,models.py模块,数据库操作——链表结构,一对多、一对一、多对多

    链表操作 链表,就是一张表的外键字段,连接另外一张表的主键字段 一对多 models.ForeignKey()外键字段一对多,值是要外键的表类 from __future__ import unico ...

  7. Oracle中表结构和表内容复制

    处理该问题注意以下几点: 1. 清空表中数据SQL:truncate table table_name; 2.复制表结构SQL:create table table_name1 as select * ...

  8. 查询MySQL数据库中表结构的几种方法

    什么是表结构?表结构就是定义数据表文件名,确定数据表包含哪些字段,各字段的字段名.字段类型.及宽度,并将这些数据输入到计算机当中. 查询方法:以表‘employees’为例子 1.describe(d ...

  9. 查询MySQL数据库中表结构

    什么是表结构?表结构就是定义数据表文件名,确定数据表包含哪些字段,各字段的字段名.字段类型.及宽度,并将这些数据输入到计算机当中. 查询方法:以表‘employees’为例子 1.describe(d ...

随机推荐

  1. 手机验证码JQUERY实现

    <!DOCTYPE html> <html> <head> <script src="http://libs.baidu.com/jquery/1. ...

  2. [LeetCode] 201. Bitwise AND of Numbers Range ☆☆☆(数字范围按位与)

    https://leetcode.com/problems/bitwise-and-of-numbers-range/discuss/56729/Bit-operation-solution(JAVA ...

  3. Nop 4.1版本已经迁移到.net core2.1版本

    1. github 下载,4.1版本,运行, install时,会让你新增后台账户密码,sql服务器 2. 在Configuration 新增Language 3. 上传中文语言包 , 你也可以先导出 ...

  4. js之querySelector方法

    querySelector()接受一个CSS选择符,返回匹配的第一个元素,反之则NULL. 如: var body = document.querySelector('body'); var mydi ...

  5. 逆袭之旅DAY20.xia.师父指导.数据类型

    2018-07-16  09:35:57 基础是王道 从码农--软件工程师--软件架构师 String 首字母大写,特殊引用类型,常量类 二.数组 存钱罐(只能放钱) 数据兼容 数组的长度(定义后长度 ...

  6. shell 流程控制语句

    case语句 case $变量名 in "值1")   如果变量的值等于值1,则执行程序1 ;;  "值2")   如果变量的值等于值2,则执行程序2 ;;   ...

  7. [Leetcode 122]买股票II Best Time to Buy and Sell Stock II

    [题目] Say you have an array for which the ith element is the price of a given stock on day i. Design ...

  8. windows消息传送(自定义消息和WM_COPYDATA)

    通过SendMessge实现的进程间通信. 0x01 自定义消息 1,WINDOWS中自定义消息的定义和使用: (1)在WNDOWS中消息分系统消息和自定义消息.系统消息定义从0到0x3FF,使用0x ...

  9. Matlab中小语法点总结(更新中)

    1. A(:,1)'   A(:)'   A(:).' A(:,n)' 对矩阵A的低n列进行共轭转置:A(:).'对矩阵A进行转置: 2.subplot的使用方法: h =subplot(m,n,p) ...

  10. 开发中最好使用not exists 取代not in

    开发中使用not in可能会存在致命的错误,在子查询中,如果存在空值,not in返回的数据就是空了,如下创建2张数据表: user表: 部门表: 现在要查询没有分配到用户的部门有哪些,使用not i ...