1.先导入相对应的库

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:zengsf@localhost:3306/flask"
# 采用自动提交方式
app.config["SQLALCHEMY_COMMIT_ON_TEARDOWN"] = True
db = SQLAlchemy(app)

2.先创建两个数据库类,例如创建LOL与DATA2这两个类

LOL与DOTA2表进行外键关联,DOTA2都有一个lol_id字段。

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 = "lol", uselist=False) 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

3.上面这些还没有完成创建数据库,还需要有数据库的创建

db.create_all()

4.接着先往两张表里添加数据,在浏览器中运行指定的路径就可以添加数据。

@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==1).first()
dota2data.lol_id = lol.id
db.session.add(dota2data)
print(db.session.query(DOTA2).all())
return "OK"

5.数据添加成功之后,可以通过正向引用或者反向引用来获取到相对应的名字

@app.route('/query')
def query_view():
# 正向引用,通过LOL表进行查询,获取对象,在利用对象调用关联属性得到DOTA2表关联的对象,在获取里面的值。
# lol = LOL.query.filter_by(id=1).first()
# data = lol.data # 反向引用,通过DOTA2表进行查询,获取对象,在利用对象调用反向引用属性获取到LOL表关联对象,获取里面的值
dota2 = DOTA2.query.filter_by(id=1).first()
data = dota2.lol return "lol:%s,dota2:%s" % (data.lname, dota2.dname)

6.由于代码是从上一直往下写的,最后别忘了调用

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

7.在浏览器中输出结果是:

lol:小炮,dota2:狙击手

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

  1. SQLAlchemy中表结构的一对多

    from flask import Flask from flask_sqlalchemy import SQLAlchemy import pymysql pymysql.install_as_My ...

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

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

  3. 三十六:数据库之SQLAlchemy外建之一对一关系

    relationship()的uselist参数默认为True,即一对多,如果要一对一,则需让uselist=False 准备工作 from sqlalchemy import create_engi ...

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

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

  5. [转载]关于laravel中表关系的一对一、一对多、多对一、多对多实践

    这是转载的文章 出处:https://blog.csdn.net/weixin_38112233/article/details/79220535 作者:重新遇到 一.建表和插入测试数据 1.用户表建 ...

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

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

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

    首先要导入SQLAIchemy模块 from sqlalchemy.ect.declaative import declarative_base 创建orm基类 Base = declarative_ ...

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

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

  9. SqlServer 允许保存对数据库中表结构的修改

    1.Tools-->optisons-->Designers 如下截图

随机推荐

  1. qq远程连接/windows远程桌面/teamviwer/xmanager/vnc的区别

    软件 客户端运行平台 服务端运行平台 服务端是否需要同子网或公网IP 网络断开当前执行命令是否会中止 评价 QQ远程连接 windows windows 否 否 感觉用了一两分钟就动不了了 windo ...

  2. Web应用的统一异常处理(二十四)

    我们在做Web应用的时候,请求处理过程中发生错误是非常常见的情况.Spring Boot提供了一个默认的映射:/error,当处理中抛出异常之后,会转到该请求中处理,并且该请求有一个全局的错误页面用来 ...

  3. python 判断变量是否存在 防止报错

    Python判断变量是否存在 方法一:使用try: ... except NameError: .... try: var except NameError: var_exists = False e ...

  4. API设计和命名

    1.前言 对于前端开发而言,肯定会和API打交道,大家也都会想过怎么设计自己的API.优秀的 API 之于代码,就如良好内涵对于每个人.好的 API 不但利于使用者理解,开发时也会事半功倍,后期维护更 ...

  5. sql server中截取字符串的常用函数

    我们如果要在sql server中,使用截取字符串的方法要怎样使用呢? sql server提供了3个常用截取字符串方法,LEFT().RIGHT().SUBSTRING() /****** Sql ...

  6. 转 /etc/ld.so.conf.d/目录下文件的作用

    在了解/etc/ld.so.conf.d/目录下文件的作用之前,先介绍下程序运行是加载动态库的几种方法:第一种,通过ldconfig命令    ldconfig命令的用途, 主要是在默认搜寻目录(/l ...

  7. ubuntu ssh前后台切换命令相关

    后台运行:命令+& 例如 sleep 60 & jobs -l 显示job的pid和状态 ps 显示用户进程 将第一个job切换回前台:fg 1 放到后台:bg 1 cltr + z ...

  8. learning at command AT+CEREG

    AT command AT+CEREG [Purpose]        Learning how to query the network registration status   [Eeviro ...

  9. day06_python_1124

    01 昨日内容回顾 字典: 增: setdefault() 有责不变,无责添加 dic['key'] = vaulue 删: pop 按照key pop('key') pop('key',None) ...

  10. JavaScript -基础- 函数与对象(三)数组对象

    一.数组对象 1.创建方式 1)创建方式一 var arr=[1,2,3]; 2)创建方式二 var arr2=new Array(1,2,3); 注意: 数组中可以存储任何数据类型.方法类型(Jav ...