flask对数据库的外键 主键
近期一直在学flask框架,后悔当初没有好好学习数据库。一个外键的知识,真的是太。。。。蓝瘦香菇
创建数据库
class Users(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer ,primary_key=True ,nullable=False ,autoincrement=True)
username = db.Column(db.String(100) ,unique=True ,nullable=False)
class Archile(db.Model):
__tablename__ = 'archile'
id = db.Column(db.Integer,primary_key=True ,autoincrement=True)
title = db.Column(db.String(100) , unique=True )
content = db.Column(db.String(100) , unique=True, nullable=False)
author_id = db.Column(db.Integer ,db.ForeignKey('users.id'))
author = db.relationship('Users' , backref=db.backref('archiles'))
# 必须指明是大写的relationship()必须指明是大写的Users
db.create_all()
必须要有db.create_all()这个操作,才能够创建数据库,并且数据库中创建之后在代码里面修改是没有用的,要先删除,这样后来的代码才会进行执行。其实后面用到migrate这个库就可以是动态的实现数据的更新和删除了。
主键在一个数据表中只能有一个
外键在一个数据表中可以有多个,数据表通过外键可以连接到另一个数据表,但是前提是要存在另外一张数据表。
补一个有主键和外键的模型
class Question(db.Model):
__tablename__ = 'question'
id = db.Column(db.Integer , primary_key=True ,nullable=False , unique=True ,autoincrement=True)
title = db.Column(db.String(100), nullable=False)
content = db.Column(db.Text,nullable=False)
author_id = db.Column(db.Integer ,db.ForeignKey('user.id'))
create_time = db.Column(db.DateTime, default=datetime.now)
# now方法是服务器第一次运行的时间
author = db.relationship('User' ,backref = db.backref('questios'))
这个模型中定义了authord_id为外键,通过author_id这个外键,我们能把question这个表连接到user表中。这样我们用user表中数据的时候就可以用author进行查询了。
我想查一个title==1的作者。
我就先查到title为1的数据表
question1 = Question.query.filter(Question.title==1).first()
那么我们再进行连接到user表中的时候
author1 = question.author
连接之后再进行查询
for i in author1 :
print(i.user)
这样就可以进行连接了。
-----------------------------------------菜鸡一枚,欢迎大佬指点留言-------------------------------------------------------------------
flask对数据库的外键 主键的更多相关文章
- (jdbc)取得数据库自动生成的主键方法
一些类,在前面的博客中有,就不重复了 public class Test2 { TestDAO t=new TestDAO(); /*前提是数据表的主键是自动增加的, *取得数据库自动生成的主键 * ...
- PostgreSQL数据库中获取表主键名称
PostgreSQL数据库中获取表主键名称 一.如下表示,要获取teacher表的主键信息: select pg_constraint.conname as pk_name,pg_attribute. ...
- javaweb学习总结(三十七)——获得MySQL数据库自动生成的主键
测试脚本如下: 1 create table test1 2 ( 3 id int primary key auto_increment, 4 name varchar(20) 5 ); 测试代码: ...
- SQL语句获取数据库中的表主键,自增列,所有列
SQL语句获取数据库中的表主键,自增列,所有列 获取表主键 1:SELECT TABLE_NAME,COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_U ...
- SQL查找数据库中所有没有主键的数据表脚本
--SQL查找数据库中所有没有主键的数据表脚本 --运行脚本后在消息中可能会显示下面现象中的一种:--(1)数据库中所有数据表都有主键(则证明所有数据表都有主键)--(2)当前数据表[数据表名]没有主 ...
- javaweb(三十七)——获得MySQL数据库自动生成的主键
测试脚本如下: 1 create table test1 2 ( 3 id int primary key auto_increment, 4 name varchar(20) 5 ); 测试代码: ...
- mybatis+oracle 完成插入数据库,并将主键返回的注意事项
mybatis+oracle 完成插入数据库,并将主键返回的注意事项一条插入语句就踩了不少的坑,首先我的建表语句是: create table t_openapi_batch_info( BATCH_ ...
- Java_jdbc 基础笔记之十五 数据库连接(取得数据库自动生成的主键)
public class testGetKeyValue { /** * 取得数据库自动生成的主键 */ @Test public void testGeneratedKeys() { Connect ...
- 五.获得MYSQL数据库自动生成的主键
测试脚本如下: 1 create table test1 2 ( 3 id int primary key auto_increment, 4 name varchar(20) 5 ); 测试代码: ...
- 【Android】Android实现监听返回键,主键(HOME),菜单键
目录结构: contents structure [+] 简介 监听 返回键 监听 主键(Home键) 监听 菜单键 一.简介 本篇文章介绍如何在Android中实现监听返回键,主键,菜单键.一般情况 ...
随机推荐
- vscode搭建c++环境
第一步:下载 Vs Code 点击链接下载Vs Code 下载版本 并安装 https://code.visualstudio.com/ 点击 Download for Windwos 安装时 如 ...
- 多级iframe中,获取元素相对于浏览器左上角的坐标(非当前frame)
搜索了好多文章,都不是自己想要的,所以在此贴下自己的解决方案,做个笔记. 1.常规需求:获取当前元素距离左边.顶部的距离 1 var x = $(div).offset().left; 2 var y ...
- Socket bind系统调用简要分析
主要查看linux kernel 源码:Socket.c 以及af_inet.c文件 1.1 bind分析 #include <sys/types.h> /* See NOTES */#i ...
- c++中的几种函数调用约定(转)
C++中的函数调用约定(调用惯例)主要针对三个问题: 1.参数传递的方式(是否采用寄存器传递参数.采用哪个寄存器传递参数.参数压桟的顺序等): 参数的传递方式,最常见的是通过栈传递.函数的调用方将参数 ...
- python pip install指定国内源镜像
有时候安装一些依赖包,网不好,直接超时,或者这个包就是死都下不下来的时候,可以指定国内源镜像. pip install -i 国内镜像地址 包名 e.g. pip install -i http:/ ...
- 使用electron+vue开发一个跨平台todolist(便签)桌面应用
# 1 最近一直在使用electron开发桌面应用,对于一个web开发者来说,html+javascript+css的开发体验让我非常舒服.之前我一直简单的以为electron只是张网页加个壳,和那些 ...
- Java编发编程 - 线程池的认识(二)
核心线程池的内部实现 依然参考 JDK 对线程池的支持,各个接口.相关类之间的关系: (1)对于Executors中几个创建线程池方法底层实现: // 创建固定线程数量的线程池 public sta ...
- Linux Shell 错误: $'\r': command not found错误解决
在Linux下执行程序最省事的方式就是将系统的执行流程封装成一个shell脚本,上传到linux环境中后就可以直接执行了,但是今天在具体实施的时候出现了错误 $'\r': command not fo ...
- ubuntu16.04搭建vulhub环境
简介 Vulhub官方中文教程https://github.com/vulhub/vulhub/blob/master/README.zh-cn.md 环境:ubuntu16.04.5 python3 ...
- 面试大厂,90%会被问到的Java面试题(附答案)
面向对象的三个特征 封装,继承,多态 多态的好处,代码中如何实现多态,虚拟机中如何实现多态 允许不同类对象对同一消息作出相应,好处如下: 可替换性:多态对已存在的代码具有可替换性 可扩充性:增加新的子 ...