【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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...