近期一直在学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对数据库的外键 主键的更多相关文章

  1. (jdbc)取得数据库自动生成的主键方法

    一些类,在前面的博客中有,就不重复了 public class Test2 { TestDAO t=new TestDAO(); /*前提是数据表的主键是自动增加的, *取得数据库自动生成的主键 * ...

  2. PostgreSQL数据库中获取表主键名称

    PostgreSQL数据库中获取表主键名称 一.如下表示,要获取teacher表的主键信息: select pg_constraint.conname as pk_name,pg_attribute. ...

  3. javaweb学习总结(三十七)——获得MySQL数据库自动生成的主键

    测试脚本如下: 1 create table test1 2 ( 3 id int primary key auto_increment, 4 name varchar(20) 5 ); 测试代码: ...

  4. SQL语句获取数据库中的表主键,自增列,所有列

    SQL语句获取数据库中的表主键,自增列,所有列   获取表主键 1:SELECT TABLE_NAME,COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_U ...

  5. SQL查找数据库中所有没有主键的数据表脚本

    --SQL查找数据库中所有没有主键的数据表脚本 --运行脚本后在消息中可能会显示下面现象中的一种:--(1)数据库中所有数据表都有主键(则证明所有数据表都有主键)--(2)当前数据表[数据表名]没有主 ...

  6. javaweb(三十七)——获得MySQL数据库自动生成的主键

    测试脚本如下: 1 create table test1 2 ( 3 id int primary key auto_increment, 4 name varchar(20) 5 ); 测试代码: ...

  7. mybatis+oracle 完成插入数据库,并将主键返回的注意事项

    mybatis+oracle 完成插入数据库,并将主键返回的注意事项一条插入语句就踩了不少的坑,首先我的建表语句是: create table t_openapi_batch_info( BATCH_ ...

  8. Java_jdbc 基础笔记之十五 数据库连接(取得数据库自动生成的主键)

    public class testGetKeyValue { /** * 取得数据库自动生成的主键 */ @Test public void testGeneratedKeys() { Connect ...

  9. 五.获得MYSQL数据库自动生成的主键

    测试脚本如下: 1 create table test1 2 ( 3 id int primary key auto_increment, 4 name varchar(20) 5 ); 测试代码: ...

  10. 【Android】Android实现监听返回键,主键(HOME),菜单键

    目录结构: contents structure [+] 简介 监听 返回键 监听 主键(Home键) 监听 菜单键 一.简介 本篇文章介绍如何在Android中实现监听返回键,主键,菜单键.一般情况 ...

随机推荐

  1. 17flask分页

    一,flask_sqlachemy的使用 如果想要展示出来的页面是分页显示,则首先需要知道每页应该分多少个条目,然后通过数据库去查找对应的条数,同时也需要和分页所需的"paginate&qu ...

  2. 第05组 Alpha冲刺 (4/6)(组长)

    .th1 { font-family: 黑体; font-size: 25px; color: rgba(0, 0, 255, 1) } #ka { margin-top: 50px } .aaa11 ...

  3. 315. Count of Smaller Numbers After Self(二分或者算法导论中的归并求逆序数对)

    You are given an integer array nums and you have to return a new counts array. The counts array has ...

  4. 美团面试官问我: ZGC 的 Z 是什么意思

    本文的阅读有一定的门槛,请先了解 GC 的基本只知识. 现代垃圾收集器的演进大部分都是往减少停顿方向发展. 像 CMS 就是分离出一些阶段使得应用线程可以和垃圾回收线程并发,当然还有利用回收线程的并行 ...

  5. sysbench压测过程

    1.sysbench安装(sysbench1.1.0)  [root@master soft]# ls sysbench1.1.0.zip sysbench1.1.0.zip 解压: [root@ma ...

  6. 磁盘构造/msdos分区(fdisk)格式化(mkfs)和挂载

    分区不是必要的,分区是与系统盘分开,防止数据丢失. 磁盘使用流程:查看磁盘(fdisk -l)---分区---格式化(创建文件系统)----挂载(自动挂载) 分区表类型:msdos(一般是系统分区)  ...

  7. 动态JavaWeb工程的架构问题

    B/S 网络应用的分层 前端(表示层) 后端( 业务逻辑层, 数据库访问层 ) 分层的目的->分模块->解耦 1,表示层---和用户直接交互 html,js,css, servlet 2, ...

  8. 11.java设计模式之享元模式

    基本需求: 小型的外包项目,给客户A做一个产品展示网站,客户A的朋友感觉效果不错,也希望做这样的产品展示网站,但是要求都有些不同 每个客户要求发布的方式不一样,A要求以新闻的方式发布,B要求以博客的方 ...

  9. Git-stash(暂存)

    修改某文件后,不想commit,使用stash保存在本地的某分支内 # 暂存 git stash ## 可暂存新增文件 git stash -u ## 为此次暂存添加标识 git stash save ...

  10. 面试官:小伙子,你给我说一下Java Exception 和 Error 的区别吧?

    前言 昨天在整理粉丝给我私信的时候,发现了一个挺有意思的事情.是这样的,有一个粉丝朋友私信问我Java 的 Exception 和 Error 有什么区别呢?说他在面试的时候被问到这个问题卡壳了,最后 ...