Flask數(shù)據(jù)庫的鏈接和模塊

Flask SQLAlchemy操作數(shù)據(jù)庫

1、Flask連接數(shù)據(jù)庫:

(1)安裝flask_sqlalchemy模塊:

pip install flask_sqlalchemy

(2)設(shè)置配置信息:在config.py文件中添加配置信息:

DIALECT = 'mysql' 數(shù)據(jù)庫類型

DRIVER = 'pymysql'  數(shù)據(jù)庫的驅(qū)動(dòng)

USERNAME = 'root'   數(shù)據(jù)庫的用戶名

PASSWORD = '123456' 數(shù)據(jù)庫密碼

HOST = 'localhost'  

PORT = '3306'   數(shù)據(jù)庫的端口號(hào)

DATABASE = 'demo'   連接的數(shù)據(jù)庫名稱



SQLALCHEMY_DATABASE_URI = "{}+{}://{}:{}@{}:{}/{}?charset=utf8".format(DIALECT,DRIVER,USERNAME,PASSWORD,HOST,PORT,DATABASE)

注意:最后要將這些數(shù)據(jù)指向一個(gè)變量SQLALCHEMY_DATABASE_URI

python3中數(shù)據(jù)庫的驅(qū)動(dòng)選擇pymysqlPython2中選擇mysqldb

(3)在主app中初始化和配置數(shù)據(jù)庫的配置信息:

使用flask_sqlalchemy中的SQLALchemy類進(jìn)行初始化和配置:

  • 導(dǎo)入flask_sqlalchemy模塊的SQLALchemy
  • 導(dǎo)入config.py中的模塊

from flask_sqlalchemy import SQLAlchemy

improt config



app.config.from_object(config)

db = SQLAlchemy(app)

(4)檢測Flask是否成功連接數(shù)據(jù)庫:

db.create_all()

沒有報(bào)錯(cuò)則說明連接數(shù)據(jù)庫成功

2艳丛、SQLALchemy模型和表格的映射:

(1)模型的繼承:

模型需要繼承自db.Model,然后需要映射表中的屬性恬偷,需要寫成db.Column的數(shù)據(jù)類型

(2)數(shù)據(jù)類型:
  • db.Integer代表的是整型數(shù)據(jù)缆镣;
  • db.String代表的是varchar戚扳,并且需要指定其最長的長度蝌箍,例如:db.String(100)
  • db.Text代表的是據(jù)庫中的text類型
(3)其他的數(shù)據(jù)庫參數(shù):
  • primary_key:代表的是這個(gè)字段是否設(shè)置成為主鍵么翰;
  • autoincrement:代表的是這個(gè)主鍵是否為自增長的牺汤;
  • nullable:代表的是這個(gè)字段是否允許為空,默認(rèn)可以為空浩嫌,值為False時(shí)檐迟,為非空
(4)將模型真正地創(chuàng)建到數(shù)據(jù)庫中:

db.create_all()

(5)例如:創(chuàng)建一個(gè)article的模型(表):

class Article(db.Model):

    __tablename__ = 'article'

    id = db.Column(db.Integer,primary_key=True,autoincrement=True)

    title = db.Column(db.String(100),nullable=False)

    content = db.Column(db.Text,nullable=False)



db.create_all()




3、用SQLAlchemy對已存在數(shù)據(jù)庫的操作:

  • 實(shí)際上码耐,使用SQLAlchemy對已存在的數(shù)據(jù)庫和重新創(chuàng)建的數(shù)據(jù)庫的方法是相同的:

查看表的構(gòu)造:

desc table_name;

disc_website.png

在Flask工程文件中構(gòu)造對象模型

website_class.png

查詢表中的數(shù)據(jù)


result = Website.query.filter().all()

渲染在網(wǎng)頁上:

jinja_web.png


四追迟、創(chuàng)建兩個(gè)表之間的關(guān)系和外鍵約束:

1、外鍵約束:

  • 定義一個(gè)User表的模型:
class User(db.Model):
    __tablename__ = 'user_table'
    id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    username = db.Column(db.String(10),nullable=False)
  • 定義一個(gè)Article的表的模型:
class Article(db.Model):
    __tablename__ = 'article table'
    id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    title = db.Column(db.String(10),nullable=False)
    content = db.Column(db.Text,nullable=False)
    author_id = db.Column(db.Integer,db.ForeignKey('user_table.id'))
  • author_idUser表對Article表的外鍵約束骚腥,Foreignkey方法傳入的參數(shù)是模型的表名敦间,外鍵的字段類型必須和外鍵表中的字段類型保持一致

2、創(chuàng)建兩個(gè)表中的關(guān)系:

  • 創(chuàng)建關(guān)系:
author = db.relationship('User',backref=db.backref('articles'))
  • Article模型創(chuàng)建一個(gè)author的屬性束铭,可以利用這個(gè)屬性通過article.author來訪問到User模型中的作者屬性廓块,在通過.username的屬性,可以查找到這個(gè)作者的作者名

  • backref是定義反向引用契沫,可以通過user_pushy.articles.content來查找到這個(gè)作者的文章內(nèi)容

  • 例如:查找所有文章的標(biāo)題為‘a(chǎn)aa’的作者:

    article_aaa = Article.query.filter(Article.title == 'aaa').first()
    print(article_aaa.author.username)

找到用戶名為'Pushy'寫的文章的內(nèi)容

    article_pushy = User.query.filter(User.username =='Pushy').first()
    # 得到的result為列表類型:
    result = article_pushy.articles[0]
    print(result.content)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末带猴,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子懈万,更是在濱河造成了極大的恐慌拴清,老刑警劉巖靶病,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異口予,居然都是意外死亡嫡秕,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進(jìn)店門苹威,熙熙樓的掌柜王于貴愁眉苦臉地迎上來昆咽,“玉大人,你說我怎么就攤上這事牙甫≈佬铮” “怎么了?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵窟哺,是天一觀的道長泻轰。 經(jīng)常有香客問我,道長且轨,這世上最難降的妖魔是什么浮声? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮旋奢,結(jié)果婚禮上泳挥,老公的妹妹穿的比我還像新娘。我一直安慰自己至朗,他們只是感情好屉符,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著锹引,像睡著了一般矗钟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嫌变,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天吨艇,我揣著相機(jī)與錄音,去河邊找鬼腾啥。 笑死东涡,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的碑宴。 我是一名探鬼主播软啼,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼延柠!你這毒婦竟也來了祸挪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤贞间,失蹤者是張志新(化名)和其女友劉穎贿条,沒想到半個(gè)月后雹仿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡整以,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年胧辽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片公黑。...
    茶點(diǎn)故事閱讀 40,675評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡邑商,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出凡蚜,到底是詐尸還是另有隱情人断,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布朝蜘,位于F島的核電站恶迈,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏谱醇。R本人自食惡果不足惜暇仲,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望副渴。 院中可真熱鬧奈附,春花似錦、人聲如沸佳晶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽轿秧。三九已至,卻和暖如春咨堤,著一層夾襖步出監(jiān)牢的瞬間菇篡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工一喘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留驱还,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓凸克,卻偏偏與公主長得像议蟆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子萎战,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內(nèi)容