最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一個(gè)基于flask的web應(yīng)用誕生 flask和mysql相連(4)

 更新時(shí)間:2017年04月11日 10:05:34   作者:雙魚(yú)座的牛  
一個(gè)基于flask的web應(yīng)用誕生第四篇,這篇文章主要介紹了如何讓flask和mysql進(jìn)行互聯(lián),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

上一章實(shí)現(xiàn)了登錄的部分功能,之所以說(shuō)是部分功能,是因?yàn)橛脩裘兔艽a寫(xiě)成固定值肯定是不可以的,一個(gè)整體的功能,至少需要注冊(cè),登錄,密碼修改等,這就需要提供一個(gè)把這些值存儲(chǔ)到數(shù)據(jù)庫(kù)的能力。

當(dāng)前的主流數(shù)據(jù)庫(kù)分為兩種,即關(guān)系數(shù)據(jù)庫(kù)和NoSql數(shù)據(jù)庫(kù),對(duì)于中小型的系統(tǒng)來(lái)說(shuō),兩種數(shù)據(jù)庫(kù)性能,易用性都相當(dāng),都是很好的選擇。

基礎(chǔ)配置

這里使用SQLAlchemy數(shù)據(jù)庫(kù)框架的flask集成包,即flask-SQLAlchemy來(lái)進(jìn)行數(shù)據(jù)庫(kù)操作。

SQLAlchemy是一個(gè)非常好的框架,簡(jiǎn)化了數(shù)據(jù)庫(kù)的操作,即提供了高層次的ORM,也提供了低層次的SQL功能,使用起來(lái)非常方便。

安裝方式與之前類(lèi)型,還是pip命令:

pip3.6 install flask-sqlalchemy

安裝完成之后,對(duì)default的配置部分進(jìn)行修改,首先導(dǎo)入包:

from flask.ext.sqlalchemy import SQLAlchemy

然后配置鏈接字符串:

app.config["SQLALCHEMY_DATABASE_URI"]='mysql://root:1234@localhost/cblog'

配置請(qǐng)求結(jié)束后更改自動(dòng)提交:

app.config["SQLALCHEMY_COMMIT_ON_TEARDOWN"]=True

實(shí)例化SQLAlchemy:

db=SQLAlchemy(app)

模型設(shè)置

安裝完成之后,繼續(xù)完善登錄的例子,修改default.py文件,新增User模型(類(lèi))和Role模型(以示關(guān)聯(lián))

Role類(lèi)

class Role(db.Model): #需繼承模型
 __tablename__="roles" #db中表明,如果不設(shè)置,則會(huì)與class同的默認(rèn)名
 id=db.Column(db.Integer,primary_key=True) #SQLAlchemy要求必須有主鍵,一般命名為id即可
 name=db.Column(db.String(50),unique=True) #表示name為字符串,不重復(fù)
 users=db.relationship("User",backref='role') #關(guān)聯(lián)user模型,并在user中添加反向引用(backref)

User類(lèi)

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列

下面要考慮如何執(zhí)行,要既方便,有不能入侵到邏輯代碼,這就要求不能硬編碼到邏輯代碼中,比如把判斷db狀態(tài)的代碼作為參數(shù)傳遞給app.run(),這時(shí)候shell就派上了用場(chǎng)

配置腳本

想讓flask支持命令行腳本,首先需要安裝flask-script擴(kuò)展:

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()

修改過(guò)之后,再次運(yùn)行:

python default.py

發(fā)現(xiàn)并沒(méi)有成功運(yùn)行,而是有提示:

可以看到,后邊需要參數(shù),分別為shell(執(zhí)行腳本),runserver(啟動(dòng)服務(wù))和幫助

下邊啟動(dòng)服務(wù):

python default.py runserver

服務(wù)成功執(zhí)行

數(shù)據(jù)庫(kù)更多配置

但這個(gè)時(shí)候,訪問(wèn)站點(diǎn)(127.0.0.1:5000),會(huì)出現(xiàn)500錯(cuò)誤,提示沒(méi)有mysql模塊,這是為什么呢?很明顯是沒(méi)有安裝mysql驅(qū)動(dòng)的原因,使用pip命令安裝驅(qū)動(dòng):

pip3.6 install MySQL-python

發(fā)現(xiàn)出現(xiàn)錯(cuò)誤,顯示內(nèi)容為(此處僅為win系統(tǒng)):

根據(jù)提示,安裝c++的工具包,按照提示上的下載地址

http://landinghub.visualstudio.com/visual-cpp-build-tools

下載完成直接為exe文件,安裝

重啟后安裝MySQL-python,發(fā)現(xiàn)還是不可以,經(jīng)百度后才發(fā)現(xiàn),MySQLdb這個(gè)庫(kù)最高只支持到python2.7,不在支持3.x,那只好用其他辦法,使用PyMySQL庫(kù):

pip3.6 install PyMySQL

然后修改default.py的代碼,增加兩行:

import pymysql
pymysql.install_as_MySQLdb()


進(jìn)入源碼,注意這一行:

sys.modules["MySQLdb"] = sys.modules["_mysql"] = sys.modules["pymysql"]

即可成功使用并連接mysql。
瀏覽器輸入連接,正確進(jìn)入站點(diǎn)。

接下來(lái),使用shell建立數(shù)據(jù)庫(kù)表,進(jìn)入default.py根目錄:

python default.py shell
from default import db
db.create_all()

這時(shí)候如果沒(méi)有報(bào)錯(cuò),那么數(shù)據(jù)庫(kù)表應(yīng)該建立完成:

數(shù)據(jù)庫(kù)遷移

那么問(wèn)題來(lái)了,這時(shí)候,對(duì)模型進(jìn)行修改,是不會(huì)反應(yīng)到db中的,那么如果修改怎么辦呢?對(duì)于當(dāng)前來(lái)說(shuō),也很簡(jiǎn)單:

db.drop_all()
db.create_all()

但這個(gè)僅僅是現(xiàn)在調(diào)試時(shí)候使用,如果db中已經(jīng)有了數(shù)據(jù),則這個(gè)肯定是無(wú)法忍受的,這時(shí)候,就輪到數(shù)據(jù)庫(kù)遷移插件Migrate登場(chǎng)了,首先還是一樣,需要進(jìn)行安裝:

pip3.6 install flask-migrate

和之前一樣,安裝完之后修改default.py文件進(jìn)行配置:

from flask.ext.migrate import Migrate,MigrateCommand

migrate=Migrate(app,db) #配置遷移
mamager.add_command("db",MigrateCommand) #配置遷移命令

然后使用init命令初始化遷移倉(cāng)庫(kù)

 python default.py db init

命令行顯示:

然后增加migrations目錄:

表示遷移文件已經(jīng)初始化完成。

migrate框架提供了一些命令來(lái)進(jìn)行遷移操作,分別為(使用default.py文件舉例):

#根據(jù)差異創(chuàng)建遷移
python default.py db migrate -m "說(shuō)明"
#改動(dòng)差異 
python default.py db upgrade
#取消差異改動(dòng)
python default.py db downgrade

回到表單

接下來(lái)看看登錄如何與數(shù)據(jù)庫(kù)關(guān)聯(lián)起來(lái),修改login方法內(nèi)的代碼:

@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() #數(shù)據(jù)庫(kù)查詢
 if user is not None:
 session["user"]=username
 return render_template("/index.html",name=username,site_name='myblog')
 else:
 flash("您輸入的用戶名或密碼錯(cuò)誤")
 return render_template("/login.html") #返回的仍為登錄頁(yè)

執(zhí)行結(jié)果非常完美。

一些總結(jié)

下面是一些關(guān)于python和db相連的總結(jié)性的東西

數(shù)據(jù)類(lèi)型

列選項(xiàng)

數(shù)據(jù)庫(kù)操作

查詢過(guò)濾器

經(jīng)過(guò)這幾章,登錄功能已經(jīng)基本完成,在下一章中將講解用戶注冊(cè)的相關(guān)功能。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python基于回溯法子集樹(shù)模板解決最佳作業(yè)調(diào)度問(wèn)題示例

    Python基于回溯法子集樹(shù)模板解決最佳作業(yè)調(diào)度問(wèn)題示例

    這篇文章主要介紹了Python基于回溯法子集樹(shù)模板解決最佳作業(yè)調(diào)度問(wèn)題,簡(jiǎn)單說(shuō)明了作業(yè)調(diào)度問(wèn)題并結(jié)合實(shí)例形式給出了Python使用回溯法子集樹(shù)模板實(shí)現(xiàn)最佳作業(yè)調(diào)度問(wèn)題的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2017-09-09
  • python 使用OpenCV進(jìn)行簡(jiǎn)單的人像分割與合成

    python 使用OpenCV進(jìn)行簡(jiǎn)單的人像分割與合成

    這篇文章主要介紹了python 使用OpenCV進(jìn)行簡(jiǎn)單的人像分割與合成的方法,幫助大家更好的利用python處理圖像,感興趣的朋友可以了解下
    2021-02-02
  • django項(xiàng)目搭建與Session使用詳解

    django項(xiàng)目搭建與Session使用詳解

    這篇文章主要給大家介紹了關(guān)于django項(xiàng)目搭建與Session使用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10
  • PyTorch之前向傳播函數(shù)forward用法解讀

    PyTorch之前向傳播函數(shù)forward用法解讀

    這篇文章主要介紹了PyTorch之前向傳播函數(shù)forward用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • TensorFlow學(xué)習(xí)之分布式的TensorFlow運(yùn)行環(huán)境

    TensorFlow學(xué)習(xí)之分布式的TensorFlow運(yùn)行環(huán)境

    這篇文章主要了TensorFlow學(xué)習(xí)之分布式的TensorFlow運(yùn)行環(huán)境的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • 對(duì)Pytorch中nn.ModuleList 和 nn.Sequential詳解

    對(duì)Pytorch中nn.ModuleList 和 nn.Sequential詳解

    今天小編就為大家分享一篇對(duì)Pytorch中nn.ModuleList 和 nn.Sequential詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08
  • python通過(guò)http上傳文件思路詳解

    python通過(guò)http上傳文件思路詳解

    這篇文章主要介紹了python通過(guò)http上傳文件,在post請(qǐng)求中,用files參數(shù)來(lái)接受文件對(duì)象相關(guān)的參數(shù),通過(guò)data/json參數(shù)接受post請(qǐng)求體的其他參數(shù)
    2021-07-07
  • Python實(shí)現(xiàn)讀取Excel文件并復(fù)制指定的數(shù)據(jù)行

    Python實(shí)現(xiàn)讀取Excel文件并復(fù)制指定的數(shù)據(jù)行

    這篇文章主要介紹了如何基于Python語(yǔ)言,讀取Excel表格文件數(shù)據(jù),并基于其中某一列數(shù)據(jù)的值,將這一數(shù)據(jù)處于指定范圍的那一行加以復(fù)制,感興趣的可以了解一下
    2023-07-07
  • Python迷宮生成和迷宮破解算法實(shí)例

    Python迷宮生成和迷宮破解算法實(shí)例

    今天小編就為大家分享一篇Python迷宮生成和迷宮破解算法實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • Ubuntu安裝配置MySQL、Python、Nginx的詳細(xì)過(guò)程

    Ubuntu安裝配置MySQL、Python、Nginx的詳細(xì)過(guò)程

    這篇文章主要介紹了Ubuntu安裝配置MySQL、Python、Nginx的詳細(xì)過(guò)程,還包含了如何解決Navicat無(wú)法遠(yuǎn)程連接的問(wèn)題,提供了檢查Python和Nginx是否已安裝的方法,需要的朋友可以參考下
    2025-03-03

最新評(píng)論

莱芜市| 兴宁市| 和硕县| 义乌市| 巴林右旗| 桃园市| 当涂县| 老河口市| 珠海市| 翁源县| 曲周县| 东乡| 普洱| 阳西县| 德昌县| 郑州市| 云安县| 滨海县| 怀来县| 田东县| 奈曼旗| 东港市| 永川市| 凭祥市| 永昌县| 乐安县| 左云县| 扶余县| 孝昌县| 石屏县| 德钦县| 武胜县| 绵竹市| 遵义市| 仪征市| 轮台县| 灵山县| 仙居县| 尼木县| 浦江县| 贡嘎县|