一個基於flask的web應用誕生第四篇,這篇文章主要介紹瞭如何讓flask和mysql進行互聯,具有一定的參考價值,感興趣的小伙伴們可以參考一下
#上一章實現了登錄的部分功能,之所以說是部分功能,是因為用戶名和密碼寫成固定值肯定是不可以的,一個整體的功能,至少需要註冊,登錄,密碼修改等,這就需要提供一個把這些值儲存到資料庫的能力。
目前的主流資料庫分為兩種,即關聯式資料庫和NoSql資料庫,對於中小型的系統來說,兩種資料庫效能,易用性都相當,都是很好的選擇。
基礎設定
這裡使用SQLAlchemy資料庫框架的flask整合包,也就是flask-SQLAlchemy來進行資料庫操作。
SQLAlchemy是一個非常好的框架,簡化了資料庫的操作,也就是提供了高層次的ORM,也提供了低層次的SQL功能,使用起來非常方便。
安裝方式與先前類型,還是pip指令:
pip3.6 install flask-sqlalchemy
安裝完成之後,對default的設定部分進行修改,先匯入套件:##
from flask.ext.sqlalchemy import SQLAlchemy
然後設定連結字串:
app.config["SQLALCHEMY_DATABASE_URI"]='mysql://root:1234@localhost/cblog'
設定請求結束後更改自動提交:
app.config["SQLALCHEMY_COMMIT_ON_TEARDOWN"]=True
實例化SQLAlchemy:
db=SQLAlchemy(app)
模型設定
class Role(db.Model): #需继承模型 __tablename__="roles" #db中表明,如果不设置,则会与class同的默认名 id=db.Column(db.Integer,primary_key=True) #SQLAlchemy要求必须有主键,一般命名为id即可 name=db.Column(db.String(50),unique=True) #表示name为字符串,不重复 users=db.relationship("User",backref='role') #关联user模型,并在user中添加反向引用(backref)User類別
class User(db.Model): __tablename__="users" id=db.Column(db.Integer,primary_key=True) username=db.Column(db.String(50),unique=True,index=True) #此列带索引 password=db.Column(db.String(50)) role_id=db.Column(db.Integer,db.ForeignKey("roles.id")) #外键指向roles表中的id列下面要考慮如何執行,要既方便,有不能入侵到邏輯程式碼,這就要求不能硬編碼到邏輯程式碼中,例如把判斷db狀態的程式碼當作參數傳遞給app.run(),這時候shell就派上了用場
設定腳本
pip3.6 install flask-script修改default.py的程式碼:
from flask.ext.script import Manager mamager=Manager(app) .... if __name__=='__main__': #app.run(debug=True) mamager.run()修改過之後,再執行:
python default.py發現並沒有成功運行,而是有提示:
python default.py runserver服務成功執行
資料庫更多設定
##但這個時候,造訪網站(127.0.0.1:5000),會出現500錯誤,提示沒有mysql模組,這是為什麼呢?很明顯是沒有安裝mysql驅動的原因,使用pip指令安裝驅動程式:
pip3.6 install MySQL-python
發現出現錯誤,顯示內容為(此處僅為win系統):
根據提示,安裝c++的工具包,按照提示上的下載地址
landinghub.visualstudio.com/visual-cpp-build-tools
#下載完成直接為exe文件,安裝
重啟後安裝MySQL-python,發現還是不可以,經過百度後才發現,MySQLdb這個函式庫最高只支援到python2.7,不在支援3.x,那隻好用其他辦法,用PyMySQL函式庫:
pip3.6 install PyMySQL然後修改default.py的程式碼,增加兩行:
import pymysql
pymysql.install_as_MySQLdb()
sys.modules["MySQLdb"] = sys.modules["_mysql"] = sys.modules["pymysql"]
即可成功使用並連接mysql。
接下來,使用shell建立資料庫表,進入default.py根目錄:
python default.py shell from default import db db.create_all()
這時候如果沒有報錯,那麼資料庫表應該建立完成:
#那麼問題來了,這時候,對模型進行修改,是不會反應到db的,那如果修改怎麼辦呢?對於目前來說,也很簡單:
db.drop_all() db.create_all()
但這個僅僅是現在調試時候使用,如果db中已經有了數據,則這個肯定是無法忍受的,這時候,就輪到數據庫遷移插件Migrate登場了,首先還是一樣,需要進行安裝:
pip3.6 install flask-migrate
和之前一樣,安裝完之後修改default.py檔案進行設定:
from flask.ext.migrate import Migrate,MigrateCommand migrate=Migrate(app,db) #配置迁移 mamager.add_command("db",MigrateCommand) #配置迁移命令
然後使用init指令初始化遷移倉庫
python default.py db init
命令列顯示:
然後增加migrations目錄:
表示遷移文件已經初始化完成。
migrate框架提供了一些命令来进行迁移操作,分别为(使用default.py文件举例):
#根据差异创建迁移 python default.py db migrate -m "说明" #改动差异 python default.py db upgrade #取消差异改动 python default.py db downgrade
回到表单
接下来看看登录如何与数据库关联起来,修改login方法内的代码:
@app.route("/login",methods=["POST"]) def loginPost(): username=request.form.get("username","") password=request.form.get("password","") user=User.query.filter_by(username=username,password=password).first() #数据库查询 if user is not None: session["user"]=username return render_template("/index.html",name=username,site_name='myblog') else: flash("您输入的用户名或密码错误") return render_template("/login.html") #返回的仍为登录页
执行结果非常完美。
一些总结
下面是一些关于python和db相连的总结性的东西
数据类型
列选项
数据库操作
查询过滤器
经过这几章,登录功能已经基本完成,在下一章中将讲解用户注册的相关功能。
以上是flask和mysql相連的實例詳解(python)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

要在有限的時間內最大化學習Python的效率,可以使用Python的datetime、time和schedule模塊。 1.datetime模塊用於記錄和規劃學習時間。 2.time模塊幫助設置學習和休息時間。 3.schedule模塊自動化安排每週學習任務。

Python在遊戲和GUI開發中表現出色。 1)遊戲開發使用Pygame,提供繪圖、音頻等功能,適合創建2D遊戲。 2)GUI開發可選擇Tkinter或PyQt,Tkinter簡單易用,PyQt功能豐富,適合專業開發。

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。Python以简洁和强大的生态系统著称,C 则以高性能和底层控制能力闻名。

2小時內可以學會Python的基本編程概念和技能。 1.學習變量和數據類型,2.掌握控制流(條件語句和循環),3.理解函數的定義和使用,4.通過簡單示例和代碼片段快速上手Python編程。

Python在web開發、數據科學、機器學習、自動化和腳本編寫等領域有廣泛應用。 1)在web開發中,Django和Flask框架簡化了開發過程。 2)數據科學和機器學習領域,NumPy、Pandas、Scikit-learn和TensorFlow庫提供了強大支持。 3)自動化和腳本編寫方面,Python適用於自動化測試和系統管理等任務。

兩小時內可以學到Python的基礎知識。 1.學習變量和數據類型,2.掌握控制結構如if語句和循環,3.了解函數的定義和使用。這些將幫助你開始編寫簡單的Python程序。

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...

使用FiddlerEverywhere進行中間人讀取時如何避免被檢測到當你使用FiddlerEverywhere...


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

禪工作室 13.0.1
強大的PHP整合開發環境

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。