1. 程式人生 > >用 Flask 來寫個輕部落格 (3) — (M)VC_連線 MySQL 和 SQLAlchemy

用 Flask 來寫個輕部落格 (3) — (M)VC_連線 MySQL 和 SQLAlchemy

目錄

前文列表

擴充套件閱讀

前言

大多數的應用程式在開發之前都需要先進行資料庫設計這一環節,所以本篇就先來記錄在 Flask 中如何使用 Models,也就是 MVC 模式中的 M 。

Models 模型

模型 就是對 資料抽象 並且提供一種 統一的通用訪問介面 方式。
在大多數的 Web 應用中,都會將資料儲存在 關係型資料庫 中,EG. Mysql/Oracle/Postgres 。(當然現在也越來越多的在使用 非關係型資料庫,但本篇只對前者做記錄。) 這就會出現一個問題,怎樣才能讓關係型資料在面向物件程式設計結構的應用程式中得到更好的契合? 問了解決這個問題,在 Web 應用程式開發中引入了 Models 的概念 —— 將關係型資料轉化為一個物件型別

SQLAlchemy

SQLAlchemy 是一個 Python 包,其最底層包裝了對資料庫進入操作的統一介面,然後在最上層提供了物件關係對映(ORM)的實現。

ORM 是在基於不同的資料結構和不同的系統型別之間進行傳遞和轉換資料的計數。簡而言之,SQLAlchemy-ORM 可以把大量的不同型別的資料庫中的資料,轉換成 Python 物件的集合。也就是說,SQLAlchemy-ORM 可以將對這些資料物件的操作轉化為對資料庫的操作。

Flask 為我們提供了 Flask SQLAlchemy,其實就是在 SQLAlchemy 上提供了一層包裝,讓 SQLAlchemy 可以結合 Flask 的一些特性來使用。

安裝 SQLAlchemy

(env) [[email protected]-dev JmilkFan-s-Blog]# pip install flask-sqlalchemy
(env) [[email protected]-dev JmilkFan-s-Blog]# pip freeze > requirements.txt

flask-sqlalchemy 預設支援 SQLite,但是這裡我們會使用 Mysql,所以還需要安裝 SQLAlchemy 和 Mysql 之間的聯結器。

(env) [[email protected]-dev
JmilkFan-s-Blog]# pip install PyMySQL (env) [[email protected]-dev JmilkFan-s-Blog]# pip freeze > requirements.txt

安裝 Mysql

wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
rpm -ivh mysql-community-release-el7-5.noarch.rpm
yum install mysql-community-server
service mysqld restart

初始化 MySQL 並設定登陸密碼:

[[email protected] JmilkFan-s-Blog]# mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MySQL to secure it, we'll need the current
password for the root user.  If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none): 
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.

Set root password? [Y/n] y
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] 
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] 
 ... Success!

By default, MySQL comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] 
 - Dropping test database...
ERROR 1008 (HY000) at line 1: Can't drop database 'test'; database doesn't exist
 ... Failed!  Not critical, keep moving...
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] 
 ... Success!

All done!  If you've completed all of the above steps, your MySQL
installation should now be secure.

Thanks for using MySQL!

Cleaning up...

建立 SQLAlchemy 和 Mysql 的連線

SQLAlchemy 通過一個特殊的 URI 字串來建立與資料庫的連線,一般的格式如下:

database_type+driver://user:[email protected]_server_ip:port/database_name

我們需要在 config.py 檔案中定義這一 URI:

class Config(object):
    """Base config class."""
    pass

class ProdConfig(Config):
    """Production config class."""
    pass

class DevConfig(Config):
    """Development config class."""
    DEBUG = True
    # MySQL connection
    SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:[email protected]:3306/jmilkfansblog'

相關推薦

Flask 部落 (3) — (M)VC_連線 MySQL SQLAlchemy

目錄 前文列表 擴充套件閱讀 前言 大多數的應用程式在開發之前都需要先進行資料庫設計這一環節,所以本篇就先來記錄在 Flask 中如何使用 Models,也就是 MVC 模式中的 M 。 Models 模型 模型 就

Flask 部落 (14) — M(V)C_實現專案首頁的模板

目錄 前文列表 實現所需要的檢視函式 在開始實現首頁模板之前, 我們為了除錯和顯示的方便, 首先偽造一些假資料: fake_data.py import rand

Flask 部落 (6) — (M)VC_models 的關係(one to many)

目錄 前文列表 擴充套件閱讀 前言 models 中的關係能夠對映成為關係型資料庫表中的關係,models 中可以相互建立引用,使得相關聯的資料能夠很容易的一次性的從資料庫中取出。 一對多 首先繼續在 models

Flask 部落 (13) — M(V)C_WTForms 服務端表單檢驗

目錄 前文列表 用 Flask 來寫個輕部落格 (1) — 建立專案 用 Flask 來寫個輕部落格 (2) — Hello World! 用 Flask 來寫個輕部落格 (3) — (M)VC_連線 MySQL 和 SQLAlchemy

Flask 部落 (7) — (M)VC_models 的關係(many to many)

目錄 目錄 前文列表 擴充套件閱讀 前期準備 多對多 使用樣例 前文列表 擴充套件閱讀 前期準備 在實現多對多之前,我們還需要先增加一個評論(Comment) models class,而且 Comment 是 P

Flask 部落 (5) — (M)VC_SQLAlchemy 的 CRUD 詳解

目錄 前文列表 擴充套件閱讀 SQLAlchemy 的 CRUD CRUD 提供了在 Web 應用程式中所需要的所有操作和檢視資料的基礎功能, 尤其在 REST 風格的應用中, CRUD 就能實現一切所需功能. 本篇博文主要記

Flask 部落 (26) — 使用 Flask-Celery-Helper 實現非同步任務

目錄 前文列表 擴充套件閱讀 Celery Celery 是使用 Python 多工庫來編寫的任務佇列工具, 可以 並行 的執行任務. 我們會將執行時間較長但又不那

Flask 部落 (16) — MV(C)_Flask Blueprint 藍圖

目錄 前文列表 擴充套件閱讀 Blueprint 藍圖 Blueprint 藍圖是一種用來擴充套件已有 Flask 應用結構的方法,通過藍圖的思想我們能夠把自己的 Application 拆分成為不同的元件。通常,一個元件代

Flask 部落 (23) — 應用 OAuth 實現 Facebook 第三方登入

目錄 前文列表 擴充套件閱讀 第三方登入流程 Resource Owner:資源所有者,本文中又稱”使用者”(user)。 Authorization server:認證伺服器,即服務提供商專門用來處理認證的伺服器。

Flask 部落 (17) — MV(C)_應用藍圖重構專案

目錄 前文列表 重構目錄結構 現在專案的目錄結構: (env) [[email protected] opt]# tree JmilkFan-s-Blog/

Flask 部落 (24) — 使用 Flask-Login 保護應用安全

目錄 前文列表 擴充套件閱讀 使用者登入帳號 Web上的使用者登入功能應該是最基本的功能了,但這個功能可能並沒有你所想像的那麼簡單,這是一個關係到使用者安全的功能. 在現代這樣速度的計算速度下,用窮舉法破解賬戶的密碼會是一件

Flask 部落 (2) — Hello World!

目錄 前文列表 擴充套件閱讀 實現最簡單的 Flask 應用 建立 config.py 檔案 該檔案是整個 Flask 應用程式的配置檔案,定義我們常用的配置類 Config/ProdConfig/DevConfig

Flask 部落 (31) — 使用 Flask-Admin 實現 FileSystem 管理

目錄 前文列表 擴充套件閱讀 編寫 FileSystem Admin 頁面 所謂的 FileSystem Admin 功能, 就是哪呢鋼構通過後臺管理頁面檢視並修改 blog 專案中, 或自定義的檔案目錄內容. 使用 F

Flask 部落 (37) — 在 Github 上為第一階段的版本打 Tag

目錄 目錄 前文列表 打 Tag 前文列表 第一階段結語 從 2016/11/13 至今 2017/01/02 剛好 50 天, <<用 Flask 來寫個輕部落格>> 系列博文的第一階段也就算告一段

Flask 部落 (32) — 使用 Flask-RESTful 構建 RESTful API 之一

目錄 前文列表 擴充套件閱讀 RESTful API REST(Representational State Transfer):是一種軟體架構的設計風格,而不是一種標準。主要用於 C/S 架構的軟體設計,也能很好的支援 B

本想python 好友發送給我指定的號,然後截屏發給好友,但是消息分割處理小毛病,還在測試

nbsp for wechat 全屏 名片 .text pict 參數 end from wxpy import * from PIL import ImageGrab import os img_path_name=‘1.jpg‘ def jiepin(img

段子了 誰說部落不能段子

1. 你就是我的第一志願 因為我想上你 2.我願有一天能牽著你的手 ,去敬各位來賓的酒 3.我給你變個魔術,我變完了 我變得更喜歡你了,但你卻看不到。 4.我喜歡一個人,  那人一定很漂亮吧 !你太自戀了。 5.在遇見你之前我有兩顆心,,一顆善心 一顆噁心,,現在我只有一顆

markdown的新部落覆蓋了原有的部落,導致原有的部落消失了

查了一下,確實是找不到了,瀏覽量還是存在的。只有重新寫了,那是在markdown上快取的部落格,感覺是個小bug。 剛開始用csdn,不會用markdown真是一臉黑。 查了下,點(也不知道圖片上傳成功了沒)新建就可以了。也確實可以了!

Flask開發部落(二):Flask-模板

作者:chen_h 微訊號 & QQ:862251340 微信公眾號:coderpai 目錄 上節回顧 如果你依照上一章的話,你應當有一個完全工作的簡單的 web 應用程式,我們專案的檔案結構如下(前