31 - 个人博客项目-02-定义模型

前提: settings.py已经连接数据库
 
 两张表想要互相调用 必须定义主外键约束,外键定义在多的一方

(1). 新建 apps / user / models.py 创建用户相关模型类

from datetime import datetime
from ext import dbclass User(db.Model):# 用户表id = db.Column(db.Integer, primary_key=True, autoincrement=True)username = db.Column(db.String(15), nullable=False)password = db.Column(db.String(128), nullable=False)phone = db.Column(db.String(11), unique=True, nullable=False)email = db.Column(db.String(30))icon = db.Column(db.String(100))isdelete = db.Column(db.Boolean, default=False)radtetime = db.Column(db.DateTime, default=datetime.now)# 代码层次: 不需要迁移,只要建立外键,就需要加relationship# 增加一个字段:db.relationship("关联的外键信息表","反向引用:外键能关联到主键信息表")articles = db.relationship("Article", backref='user')comments = db.relationship('Comment', backref="user")def __str__(self):return self.usernameclass Photo(db.Model):# 相册表id = db.Column(db.Integer, primary_key=True, autoincrement=True)photo_name = db.Column(db.String(50), nullable=False)photo_datetime = db.Column(db.DateTime, default=datetime.now)user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)def __str__(self):return self.photo_nameclass AboutMe(db.Model):# 关于我页面id = db.Column(db.Integer, primary_key=True, autoincrement=True)content = db.Column(db.BLOB, nullable=False)pdatetime = db.Column(db.DateTime, default=datetime.now)# 要与用户建立联系user_id = db.Column(db.Integer, db.ForeignKey('user.id'), unique=True)user = db.relationship("User", backref="about")class MessageBoard(db.Model):# 留言id = db.Column(db.Integer, primary_key=True, autoincrement=True)content = db.Column(db.String(255), nullable=False)mdatetime = db.Column(db.DateTime, default=datetime.now)user_id = db.Column(db.Integer, db.ForeignKey('user.id'))# 关系:user = db.relationship('User', backref='messages')

(2). 新建 apps / articie/ models.py 创建文章相关模型类

        (1) . Article 中的 content字段 需要在数据库类型手动改为 blob类型

from datetime import datetime
from ext import dbclass Article_type(db.Model):# 文章分类# 生成表的时候提示错误? 可能是因为外键绑定的id内容不存在,还不允许为空# __tablename__ = "type"id = db.Column(db.Integer, primary_key=True, autoincrement=True)type_name = db.Column(db.String(20), nullable=False)articles = db.relationship("Article", backref='article_type')class Article(db.Model):# 文章表id = db.Column(db.Integer, primary_key=True, autoincrement=True)title = db.Column(db.String(50), nullable=False)content = db.Column(db.Text, nullable=False)pdatetime = db.Column(db.DateTime, default=datetime.now())click_num = db.Column(db.Integer, default=0)save_num = db.Column(db.Integer, default=0)love_num = db.Column(db.Integer, default=0)# 文章定义用户外键user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)# 文章定义分类外键type_id = db.Column(db.Integer, db.ForeignKey('article_type.id'), nullable=False)# 只是通过文章找评论表中的评论内容comments = db.relationship("Comment", backref="article")class Comment(db.Model):# 评论表# 数据库默认表名为小写类名,自定义表名# __tablename__ = 'comment'id = db.Column(db.Integer, primary_key=True, autoincrement=True)comment = db.Column(db.String(255), nullable=False)user_id = db.Column(db.Integer, db.ForeignKey('user.id'))article_id = db.Column(db.Integer, db.ForeignKey('article.id'))cdatetime = db.Column(db.DateTime, default=datetime.now)def __str__(self):return self.comment

(3). 将模型引入app.py中

from apps.user.models import *
from apps.articie.models import *

(4). 指令生成模型,迁移数据库

python app.py db init
python app.py db migrate
python app.py db upgrade

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/90972.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在Ubuntu Linux系统上安装RabbitMQ服务并解决公网远程访问问题

文章目录 前言1.安装erlang 语言2.安装rabbitMQ3. 内网穿透3.1 安装cpolar内网穿透(支持一键自动安装脚本)3.2 创建HTTP隧道 4. 公网远程连接5.固定公网TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 前言 RabbitMQ是一个在 AMQP(高级消息队列协议)基…

使用Visual Studio 2022实现透明按钮和标签、POPUP样式窗体的一种工业系统的UI例程

例程实现的功能说明 1、主窗体采用POPUP样式,无标题栏、无菜单栏,适合工业类软件 2、按钮、标签使用自绘,实现透明样式,可以实现灵活的样式设计,更具设计感 按钮重绘函数:OnDrawItem()按钮样式设定&#…

URL重定向漏洞

URL重定向漏洞 1. URL重定向1.1. 漏洞位置 2. URL重定向基础演示2.1. 查找漏洞2.1.1. 测试漏洞2.1.2. 加载完情况2.1.3. 验证漏洞2.1.4. 成功验证 2.2. 代码修改2.2.1. 用户端代码修改2.2.2. 攻击端代码修改 2.3. 利用思路2.3.1. 用户端2.3.1.1. 验证跳转 2.3.2. 攻击端2.3.2.1…

六、事务-3.事务四大特性

1、原子性 事务是一组操作,这组操作是不可分割的最小操作单元,这组操作要么全部执行成功,要么全部执行失败。 如:三步转账操作,当中只要有一步操作失败了,整个就失败了。 2、一致性 事务完成时&#xff…

Ansible自动化运维工具(二)

目录 (6)copy模块 (7)file模块 ​编辑​编辑(8)hostname模块 (9)ping模块 (10)yum 模块 (11)service/system模块 ​编辑 ​…

【锁】定时任务推送数据-redission加锁实例优化

文章目录 redission 加锁代码-有问题优化代码看门狗是什么? redission 加锁代码-有问题 /*** 收货入库物料标签(包装码)推送接口** throws Exception*/public void synReceiveMaterialTags() throws Exception {String tag DateFormatUtils.format(new Date(), &qu…

【进程间通信】管道

(꒪ꇴ꒪ ),Hello我是祐言QAQ我的博客主页:C/C语言,数据结构,Linux基础,ARM开发板,网络编程等领域UP🌍快上🚘,一起学习,让我们成为一个强大的攻城狮&#xff0…

【base64】JavaScriptuniapp 将图片转为base64并展示

Base64是一种用于编码二进制数据的方法&#xff0c;它将二进制数据转换为文本字符串。它的主要目的是在网络传输或存储过程中&#xff0c;通过将二进制数据转换为可打印字符的形式进行传输 JavaScript 压缩图片 <html><body><script src"https://code.j…

如果应对2023年国赛

国赛倒计时一周&#xff0c;大家多看看优秀论文&#xff0c;赛前多思考&#xff0c;使大脑在活跃状态&#xff0c;更好的应对题目。 需要历年游戏论文的小伙伴可私信我&#xff0c;或关注微信公众号私信我

每日一题(反转链表)

每日一题&#xff08;反转链表&#xff09; 206. 反转链表 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 可以定义一个新的newhead结构体指针。再定义cur指针和next指针互相配合&#xff0c;将原链表中的节点从头到尾依次头插到newhead链表中&#xff0c;同时更…

Idea中使用Statistic插件统计工程项目代码量

1. 功能背景 公司要对一个项目进行代码统计&#xff0c;这么多类&#xff0c;总不能让我一个一个数据&#xff0c;于是想到了Statistic插件。让我们一起看看Statistic插件怎么使用吧。 2. Statistic插件 首先需要知道Idea统计项目代码行数&#xff0c;主要是使用Statistic插…

Vue的使用(2)

一个简单的Vue项目的创建 创建一个UserList.vue组件 在App.vue中使用该组件 使用组件的第一步&#xff0c;导入组件使用组件的第二部&#xff0c;申明这个组件使用组件的第三步&#xff1a;引用组件 结果&#xff1a; 事件和插值语法 <template> <div><!-- te…