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中实现监听返回键,主键,菜单键.一般情况 ...
随机推荐
- mysql优化之2--索引优化
1. 创建联合索引时,要注意,离散度大的列前置. 可以通过 select count(distinct(A)),count(distinct(B)) from tb; 看哪个列离散度大. 2. 索引列 ...
- spring处理静态资源方式
1. <mvc:default-servlet-handler/>default-servlet-handler在SpringMVC上下文定义一个org.springframework.w ...
- python中的时间和时间格式转换
1.python中的时间:要得到年月日时分秒的时间: import time #time.struct_time(tm_year=2012, tm_mon=9, tm_mday=15, tm_hour ...
- 关于BigDecimal转String的准确性问题
case 1: String str=new BigDecimal(123.9).toString() 输出str:123.90000000000000568434188608080148696899 ...
- 主动关闭 time-wait 2msl 处理
先上传后面整理 /* * This routine is called by the ICMP module when it gets some * sort of error condition. ...
- 基于FFmpeg的Dxva2硬解码及Direct3D显示(二)
解析视频源 目录 解析视频源 获取视频流 解析视频流 说明:这篇博文分为"获取视频流"和"解析视频流"两个部分,使用的是FFmpeg4.1的版本,与网上流传的低 ...
- 创建Grafana监控视图
前言 Grafana允许查询,可视化,警报和了解指标,无论它们存储在哪里. 可视化:具有多种选项的快速灵活的客户端图.面板插件提供了许多不同的方式来可视化指标和日志. 动态仪表盘:使用模板变量创建动态 ...
- python学习手册.first
# 1.注释 # 行注释 # # print('****') # 多行注释三个双引号或者单引号 '''print('****') pri ...
- 动态JavaWeb工程的架构问题
B/S 网络应用的分层 前端(表示层) 后端( 业务逻辑层, 数据库访问层 ) 分层的目的->分模块->解耦 1,表示层---和用户直接交互 html,js,css, servlet 2, ...
- SQL Server 批量生成数据库内多个表的表结构
在遇到大型数据库的时候,一个数据库内存在大量的数据表,如果要生成多个表的表结构,一个表的检索,然后右键Create出来,太麻烦了. 下面我介绍下批量选择并生成多个表的表结构快捷方式,仅供参考. 第一步 ...