SQLAlchemy中表结构的一对一
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中表结构的一对一的更多相关文章
- SQLAlchemy中表结构的一对多
from flask import Flask from flask_sqlalchemy import SQLAlchemy import pymysql pymysql.install_as_My ...
- 在线批量修改mysql中表结构
在线批量修改mysql中表结构 1.获取要修改的表的表名称登录mysql库,查询出所有表 show tables; 将需要修改表结构的表名称存放到b.txt文件中2.执行修改修改表引擎为InnoDB ...
- 三十六:数据库之SQLAlchemy外建之一对一关系
relationship()的uselist参数默认为True,即一对多,如果要一对一,则需让uselist=False 准备工作 from sqlalchemy import create_engi ...
- Oracle中表结构和表内容复制
处理该问题注意以下几点: 1. 清空表中数据SQL:truncate table table_name; 2.复制表结构SQL:create table table_name1 as select * ...
- [转载]关于laravel中表关系的一对一、一对多、多对一、多对多实践
这是转载的文章 出处:https://blog.csdn.net/weixin_38112233/article/details/79220535 作者:重新遇到 一.建表和插入测试数据 1.用户表建 ...
- 查询MySQL数据库中表结构的几种方法
什么是表结构?表结构就是定义数据表文件名,确定数据表包含哪些字段,各字段的字段名.字段类型.及宽度,并将这些数据输入到计算机当中. 查询方法:以表‘employees’为例子 1.describe(d ...
- SQLAlchemy 增删改查 一对一 多对多
首先要导入SQLAIchemy模块 from sqlalchemy.ect.declaative import declarative_base 创建orm基类 Base = declarative_ ...
- 查询MySQL数据库中表结构
什么是表结构?表结构就是定义数据表文件名,确定数据表包含哪些字段,各字段的字段名.字段类型.及宽度,并将这些数据输入到计算机当中. 查询方法:以表‘employees’为例子 1.describe(d ...
- SqlServer 允许保存对数据库中表结构的修改
1.Tools-->optisons-->Designers 如下截图
随机推荐
- qq远程连接/windows远程桌面/teamviwer/xmanager/vnc的区别
软件 客户端运行平台 服务端运行平台 服务端是否需要同子网或公网IP 网络断开当前执行命令是否会中止 评价 QQ远程连接 windows windows 否 否 感觉用了一两分钟就动不了了 windo ...
- Web应用的统一异常处理(二十四)
我们在做Web应用的时候,请求处理过程中发生错误是非常常见的情况.Spring Boot提供了一个默认的映射:/error,当处理中抛出异常之后,会转到该请求中处理,并且该请求有一个全局的错误页面用来 ...
- python 判断变量是否存在 防止报错
Python判断变量是否存在 方法一:使用try: ... except NameError: .... try: var except NameError: var_exists = False e ...
- API设计和命名
1.前言 对于前端开发而言,肯定会和API打交道,大家也都会想过怎么设计自己的API.优秀的 API 之于代码,就如良好内涵对于每个人.好的 API 不但利于使用者理解,开发时也会事半功倍,后期维护更 ...
- sql server中截取字符串的常用函数
我们如果要在sql server中,使用截取字符串的方法要怎样使用呢? sql server提供了3个常用截取字符串方法,LEFT().RIGHT().SUBSTRING() /****** Sql ...
- 转 /etc/ld.so.conf.d/目录下文件的作用
在了解/etc/ld.so.conf.d/目录下文件的作用之前,先介绍下程序运行是加载动态库的几种方法:第一种,通过ldconfig命令 ldconfig命令的用途, 主要是在默认搜寻目录(/l ...
- ubuntu ssh前后台切换命令相关
后台运行:命令+& 例如 sleep 60 & jobs -l 显示job的pid和状态 ps 显示用户进程 将第一个job切换回前台:fg 1 放到后台:bg 1 cltr + z ...
- learning at command AT+CEREG
AT command AT+CEREG [Purpose] Learning how to query the network registration status [Eeviro ...
- day06_python_1124
01 昨日内容回顾 字典: 增: setdefault() 有责不变,无责添加 dic['key'] = vaulue 删: pop 按照key pop('key') pop('key',None) ...
- JavaScript -基础- 函数与对象(三)数组对象
一.数组对象 1.创建方式 1)创建方式一 var arr=[1,2,3]; 2)创建方式二 var arr2=new Array(1,2,3); 注意: 数组中可以存储任何数据类型.方法类型(Jav ...