【Flask學習筆記】數據模型設計

来源:https://www.cnblogs.com/peterzone/archive/2018/07/27/9367919.html
-Advertisement-
Play Games

【前言】對於像我一樣的新手來說,我覺得此環節難點主要是相關依賴包的安裝和Flask-SQLAlchemy的使用,下麵將一一講解: 所謂數據模型,百度的解釋是:“數據模型(Data Model)是數據特征的抽象。數據(Data)是描述事物的符號記錄,模型(Model)是現實世界的抽象。數據模型從抽象層 ...


【前言】對於像我一樣的新手來說,我覺得此環節難點主要是相關依賴包的安裝和Flask-SQLAlchemy的使用,下麵將一一講解:

所謂數據模型,百度的解釋是:“數據模型(Data Model)是數據特征的抽象。數據(Data)是描述事物的符號記錄,模型(Model)是現實世界的抽象。數據模型從抽象層次上描述了系統的靜態特征、動態行為和約束條件,為資料庫系統的信息表示與操作提供了一個抽象的框架。數據模型所描述的內容有三部分:數據結構數據操作和數據約束。”

這個解釋還算通俗易懂,筆者就不再翻譯了。

數據模型的建立過程相對簡單,主要分為三步:

1.SQLAlchemy對象初始化

【參考資料傳送門

2.創建表

此過程只不過是SQL語句的堆積,如果SQL語句沒學好,建議自行補課。

3.設置模型的執行入口

一個函數:

if __name__ == "__main__":
    db.create_all()

下麵詳細介紹:

 

 安裝sqlalchemy的兩種方法:

1.命令行法:

進入虛擬環境-->檢測是否已經安裝--->安裝:

 

 

 

 方法2:在Pycharm中安裝

 

 

 

以上準備工作做好了,就可以正式開始了:

先進入mysql,建立一個名為movie的資料庫(不知道如何建立?那就先學完MYSQL的相關知識):

create database moive

再查詢一下是否建立成功:

 

2.數據模型設計

以“會員”為例(附完整代碼):

 

完整代碼(app/models.py):

  1 # coding=utf-8
  2 from flask import Flask
  3 from flask_sqlalchemy import SQLAlchemy
  4 from datetime import datetime
  5 import pymysql
  6 app = Flask(__name__)
  7 app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:[email protected]:3306/moive'
  8 #app.config['SQLALCHEMY_BINDS'] = 'mysql+pymysql://root:[email protected]:3306/movie'
  9 app.config["SQLAlCHEMY_TRACK_MODIFICATIONS"] = True
 10 
 11 db = SQLAlchemy(app)
 12 
 13 
 14 # 會員
 15 class User(db.Model):
 16     __tablename__ = "user"
 17     id = db.Column(db.Integer, primary_key=True)
 18     name = db.Column(db.String(100), unique=True)
 19     pwd = db.Column(db.String(100))
 20     email = db.Column(db.String(100), unique=True)
 21     phone = db.Column(db.String(11), unique=True)
 22     info = db.Column(db.Text)
 23     face = db.Column(db.String(255), unique=True)
 24     addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow)
 25     uuid = db.Column(db.String(255), unique=True)
 26     userlogs = db.relationship('Userlog', backref='user')
 27     comments = db.relationship('Comment', backref='user')
 28     moivecols = db.relationship('Moivecol', backref='user')
 29 
 30     def __repr__(self):
 31         return "<User %r>" % self.name
 32 
 33 
 34 # 會員登錄日誌
 35 class Userlog(db.Model):
 36     __tablename__ = "userlog"
 37     id = db.Column(db.Integer, primary_key=True)
 38     user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
 39     ip = db.Column(db.String(100))
 40     addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow)
 41 
 42     def __repr__(self):
 43         return "<Userlog %r>" % self.user_id
 44 
 45 
 46 # 標簽
 47 class Tag(db.Model):
 48     __tablename__ = "tag"
 49     id = db.Column(db.Integer, primary_key=True)
 50     name = db.Column(db.String(100), unique=True)
 51     addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow)
 52     movies = db.relationship('Moive', backref='tag')
 53 
 54     def __repr__(self):
 55         return "<Tag %r>" % self.name
 56 
 57 
 58 # 電影
 59 class Moive(db.Model):
 60     __tablename__ = "moive"
 61     id = db.Column(db.Integer, primary_key=True)
 62     title = db.Column(db.String(255), unique=True)
 63     url = db.Column(db.String(255), unique=True)
 64     info = db.Column(db.Text)
 65     logo = db.Column(db.String(255), unique=True)
 66     star = db.Column(db.SmallInteger)
 67     playnum = db.Column(db.BigInteger)
 68     commentnum = db.Column(db.BigInteger)
 69     tag_id = db.Column(db.Integer, db.ForeignKey('tag.id'))
 70     area = db.Column(db.String(255))
 71     release_time = db.Column(db.Date)
 72     length = db.Column(db.String(255))
 73     addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow)
 74     comments = db.relationship('Comment', backref='moive')
 75     moivecols = db.relationship('Moivecol', backref='moive')
 76 
 77     def __repr__(self):
 78         return "<Moive %r>" % self.title
 79 
 80 
 81 # 上映預告
 82 class Preview(db.Model):
 83     __tablename__ = "preview"
 84     id = db.Column(db.Integer, primary_key=True)
 85     title = db.Column(db.String(255), unique=True)
 86     logo = db.Column(db.String(255), unique=True)
 87     addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow)
 88 
 89     def __repr__(self):
 90         return "<Preview %r>" % self.title
 91 
 92 
 93 # 評論
 94 class Comment(db.Model):
 95     __tablename__ = "comment"
 96     id = db.Column(db.Integer, primary_key=True)
 97     content = db.Column(db.Text)
 98     moive_id = db.Column(db.Integer, db.ForeignKey('moive.id'))
 99     user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
100     addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow)
101 
102     def __repr__(self):
103         return "<Comment %r>" % self.id
104 
105 
106 # 電影收藏
107 class Moivecol(db.Model):
108     __tablename__ = "moivecol"
109     id = db.Column(db.Integer, primary_key=True)
110     moive_id = db.Column(db.Integer, db.ForeignKey('moive.id'))
111     user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
112     addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow)
113 
114     def __repr__(self):
115         return "<Moivecol %r>" % self.id
116 
117 
118 # 許可權
119 class Auth(db.Model):
120     __tablename__ = "auth"
121     id = db.Column(db.Integer, primary_key=True)
122     name = db.Column(db.String(100), unique=True)
123     url = db.Column(db.String(255), unique=True)
124     addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow)
125 
126     def __repr__(self):
127         return "<Auth %r>" % self.name
128 
129 
130 # 角色
131 class Role(db.Model):
132     __tablename__ = "role"
133     id = db.Column(db.Integer, primary_key=True)
134     name = db.Column(db.String(100), unique=True)
135     auths = db.Column(db.String(600))
136     addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow)
137 
138     def __repr__(self):
139         return "<Role %r>" % self.name
140 
141 
142 # 管理員
143 class Admin(db.Model):
144     __tablename__ = "admin"
145     id = db.Column(db.Integer, primary_key=True)
146     name = db.Column(db.String(100), unique=True)
147     pwd = db.Column(db.String(100))
148     is_super = db.Column(db.SmallInteger)
149     role_id = db.Column(db.Integer, db.ForeignKey('role.id'))
150     addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow)
151     adminlogs = db.relationship("Adminlog", backref='admin')
152     oplogs = db.relationship("oplog", backref='admin')
153 
154     def __repr__(self):
155         return "<Admin %r>" % self.name
156 
157 
158 # 管理員登錄日誌
159 class Adminlog(db.Model):
160     __tablename__ = "adminlog"
161     id = db.Column(db.Integer, primary_key=True)
162     admin_id = db.Column(db.Integer, db.ForeignKey('admin.id'))
163     ip = db.Column(db.String(100))
164     addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow)
165 
166     def __repr__(self):
167         return "<Adminlog %r>" % self.id
168 
169 
170 # 管理員操作日誌
171 class Oplog(db.Model):
172     __tabelname__ = "oplog"
173     id = db.Column(db.Integer, primary_key=True)
174     admin_id = db.Column(db.Integer, db.ForeignKey('admin.id'))
175     ip = db.Column(db.String(100))
176     reason = db.Column(db.String(600))
177     addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow)
178 
179     def __repr__(self):
180         return "<Oplog %r>" % self.id
181 
182 
183 if __name__ == "__main__":
184     db.create_all()

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文內容: 註解Annotation的介紹 基本註解的用法 首發日期:2018-07-28 註解Annotation的介紹 Annotation是代碼中的特殊標記,能夠在編譯、類載入、運行時被識別(需要設置),並根據不同的Annotation來執行不同的處理。 Annotation可以修飾包、類、構... ...
  • 1. 學習計劃 1、solr集群搭建 2、使用solrj管理solr集群 3、把搜索功能切換到集群版 4、添加商品同步索引庫。 a) Activemq b) 發送消息 c) 接收消息 2. 什麼是SolrCloud SolrCloud(solr 雲)是Solr提供的分散式搜索方案,當你需要大規模,容 ...
  • 一、屬性(特性) 普通方法去執行的時候,後面需要加括弧,特性方法執行的時候和靜態欄位一樣不需要不需要加括弧. 特性方法不和欄位同名. 特性方法不能傳參數. 獲取特性 設置特性 設置特性方法的時候,所需要加的裝飾器名字規則是,你所設置特性方法名字點setter(例如:@end.setter) 這個特性 ...
  • 運行結果: ...
  • 最近在面試過程中,遇到許多抽象類和介面的面試題,所以今天特意研究了下,然後寫出來分享給大家,希望對面試的朋友有幫助,如果覺得寫的可以點個贊吧! 1:抽象類可以實例化,抽象類可以通過子類間接的實例化父類,介面不能實例化。 2:抽象類可以擁有私有屬性、方法,介面不能擁有。 3:抽象類方法不能使用defa ...
  • C++11新特性: auto: auto讓編譯器通過初始值來推算變數的類型。 auto定義的變數必須有初始值。 auto聲明的所有變數的初始基本數據類型都必須一樣。 decltype: decltype的作用是選擇返回操作數的數據類型。 編譯器分析表達式並得到它的類型,卻不計算表達式的值。 如果de ...
  • Given a string, find the length of the longest substring without repeating characters. Examples: Given "abcabcbb", the answer is "abc", which the leng ...
  • 15.1 動態代理 在之後學習Spring框架時,Spring框架有一大核心思想,就是AOP,(Aspact-Oriented-Programming 面向切麵編程) 而AOP的原理就是Java的動態代理機制,在Java的動態代理機制中,有兩個重要的類或介面,一個是 InvocationHandle ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...