欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

flask操作數(shù)據(jù)庫插件Flask-SQLAlchemy的使用

 更新時(shí)間:2023年09月06日 11:27:30   作者:javascript_good  
Python?中最廣泛使用的ORM框架是SQLAlchemy,它是一個(gè)很強(qiáng)大的關(guān)系型數(shù)據(jù)庫框架,本文就來介紹一下flask操作數(shù)據(jù)庫插件Flask-SQLAlchemy的使用,感興趣的可以了解一下

1、ORM 框架

Web 開發(fā)中,一個(gè)重要的組成部分便是數(shù)據(jù)庫了。Web 程序中最常用的莫過于關(guān)系型數(shù)據(jù)庫了,也稱 SQL 數(shù)據(jù)庫。另外,文檔數(shù)據(jù)庫(如 mongodb)、鍵值對數(shù)據(jù)庫(如 redis)近幾年也逐漸在 web 開發(fā)中流行起來,我們習(xí)慣把這兩種數(shù)據(jù)庫稱為 NoSQL 數(shù)據(jù)庫。

大多數(shù)的關(guān)系型數(shù)據(jù)庫引擎(比如 MySQL、Postgres 和 SQLite)都有對應(yīng)的 Python 包。在這里,我們不直接使用這些數(shù)據(jù)庫引擎提供的 Python 包,而是使用對象關(guān)系映射(Object-Relational Mapper, ORM)框架,它將低層的數(shù)據(jù)庫操作指令抽象成高層的面向?qū)ο蟛僮鳌R簿褪钦f,如果我們直接使用數(shù)據(jù)庫引擎,我們就要寫 SQL 操作語句,但是,如果我們使用了 ORM 框架,我們對諸如表、文檔此類的數(shù)據(jù)庫實(shí)體就可以簡化成對 Python 對象的操作。

Python 中最廣泛使用的 ORM 框架是 SQLAlchemy,它是一個(gè)很強(qiáng)大的關(guān)系型數(shù)據(jù)庫框架,不僅支持高層的 ORM,也支持使用低層的 SQL 操作,另外,它也支持多種數(shù)據(jù)庫引擎,如 MySQL、Postgres 和 SQLite 等

2、Flask-SQLAlchemy

在 Flask 中,為了簡化配置和操作,我們使用的 ORM 框架是 Flask-SQLAlchemy,這個(gè) Flask 擴(kuò)展封裝了 SQLAlchemy 框架。在 Flask-SQLAlchemy 中,數(shù)據(jù)庫使用 URL 指定,下表列出了常見的數(shù)據(jù)庫引擎和對應(yīng)的 URL

上面的表格中,username 和 password 表示登錄數(shù)據(jù)庫的用戶名和密碼,hostname 表示 SQL 服務(wù)所在的主機(jī),可以是本地主機(jī)(localhost)也可以是遠(yuǎn)程服務(wù)器,database 表示要使用的數(shù)據(jù)庫。有一點(diǎn)需要注意的是,SQLite 數(shù)據(jù)庫不需要使用服務(wù)器,它使用硬盤上的文件名作為 database。

3、一個(gè)最小的應(yīng)用

創(chuàng)建數(shù)據(jù)庫

首先,我們使用 pip 安裝 Flask-SQLAlchemy:

pip install flask-sqlalchemy

接下來,我們配置一個(gè)簡單的 SQLite 數(shù)據(jù)庫:

$ cat app.py
# -*- coding: utf-8 -*-
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///db/users.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
db = SQLAlchemy(app)
class User(db.Model):
    """定義數(shù)據(jù)模型"""
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True)
    email = db.Column(db.String(120), unique=True)
    def __init__(self, username, email):
        self.username = username
        self.email = email
    def __repr__(self):
        return '<User %r>' % self.username

這里有幾點(diǎn)需要注意的是:

  • app 應(yīng)用配置項(xiàng) SQLALCHEMY_DATABASE_URI 指定了 SQLAlchemy 所要操作的數(shù)據(jù)庫,這里我們使用的是 SQLite,數(shù)據(jù)庫 URL 以 sqlite:/// 開頭,后面的 db/users.db 表示數(shù)據(jù)庫文件存放在當(dāng)前目錄的 db 子目錄中的 users.db 文件。當(dāng)然,你也可以使用絕對路徑,如 /tmp/users.db 等。
  • db 對象是 SQLAlchemy 類的實(shí)例,表示程序使用的數(shù)據(jù)庫。
  • 我們定義的 User 模型必須繼承自 db.Model,這里的模型其實(shí)就對應(yīng)著數(shù)據(jù)庫中的表。其中,類變量__tablename__ 定義了在數(shù)據(jù)庫中使用的表名,如果該變量沒有被定義,F(xiàn)lask-SQLAlchemy 會使用一個(gè)默認(rèn)名字。
    接著,我們創(chuàng)建表和數(shù)據(jù)庫。為此,我們先在當(dāng)前目錄創(chuàng)建 db 子目錄和新建一個(gè) users.db 文件,然后在交互式 Python shell 中導(dǎo)入 db 對象并調(diào)用 SQLAlchemy 類的 create_all() 方法:
$ mkdir db
$ python
>>> from app import db
>>> db.create_all()

我們驗(yàn)證一下,”users” 表是否創(chuàng)建成功:

$ sqlite3 db/users.db    # 打開數(shù)據(jù)庫文件
SQLite version 3.8.10.2 2015-05-20 18:17:19
Enter ".help" for usage hints.
sqlite> .schema users   # 查看 "user" 表的 schema
CREATE TABLE users (
        id INTEGER NOT NULL,
        username VARCHAR(80),
        email VARCHAR(120),
        PRIMARY KEY (id),
        UNIQUE (username),
        UNIQUE (email)
);

插入數(shù)據(jù)

我們創(chuàng)建一些用戶,通過使用 db.session.add()來添加數(shù)據(jù):

@app.route('/adduser')
def add_user():
    user1 = User('ethan', 'ethan@example.com')
    user2 = User('admin', 'admin@example.com')
    user3 = User('guest', 'guest@example.com')
    user4 = User('joe', 'joe@example.com')
    user5 = User('michael', 'michael@example.com')
    db.session.add(user1)
    db.session.add(user2)
    db.session.add(user3)
    db.session.add(user4)
    db.session.add(user5)
    db.session.commit()
    return "<p>add succssfully!"

這里有一點(diǎn)要注意的是,我們在將數(shù)據(jù)添加到會話后,在最后要記得調(diào)用 db.session.commit() 提交事務(wù),這樣,數(shù)據(jù)才會被寫入到數(shù)據(jù)庫。

查詢數(shù)據(jù)

查詢數(shù)據(jù)主要是用 query 接口,例如 all() 方法返回所有數(shù)據(jù),filter_by() 方法對查詢結(jié)果進(jìn)行過濾,參數(shù)是鍵值對,filter 方法也可以對結(jié)果進(jìn)行過濾,但參數(shù)是布爾表達(dá)式,詳細(xì)的介紹請查看這里。

>>> from app import User
>>> users = User.query.all()
>>> users
[<User u'ethan'>, <User u'admin'>, <User u'guest'>, <User u'joe'>, <User u'michael'>]
>>>
>>> user = User.query.filter_by(username='joe').first()
>>> user
<User u'joe'>
>>> user.email
u'joe@example.com'
>>>
>>> user = User.query.filter(User.username=='ethan').first()
>>> user
<User u'ethan'>

如果我們想查看 SQLAlchemy 為查詢生成的原生 SQL 語句,只需要把 query 對象轉(zhuǎn)化成字符串:

>>> str(User.query.filter_by(username='guest'))
'SELECT users.id AS users_id, users.username AS users_username, users.email AS users_email \nFROM users \nWHERE users.username = :username_1'

分頁方法

分頁方法可以采用 limit() 和 offset() 方法,比如從第 3 條記錄開始取(注意是從 0 開開始算起),并最多取 1 條記錄,可以這樣:

users = User.query.limit(1).offset(3)

更新數(shù)據(jù)

更新數(shù)據(jù)也用 add() 方法,如果存在要更新的對象,SQLAlchemy 就更新該對象而不是添加。

>>> from app import db
>>> from app import User
>>>
>>> admin = User.query.filter_by(username='admin').first()
>>>
>>> admin.email = 'admin@hotmail.com'
>>> db.session.add(admin)
>>> db.session.commit()
>>>
>>> admin = User.query.filter_by(username='admin').first()
>>> admin.email
u'admin@hotmail.com'

刪除數(shù)據(jù)

刪除數(shù)據(jù)用 delete() 方法,同樣要記得 delete 數(shù)據(jù)后,要調(diào)用 commit() 提交事務(wù):

>>> from app import db
>>> from app import User
>>>
>>> admin = User.query.filter_by(username='admin').first()
>>> db.session.delete(admin)
>>> db.session.commit()

 到此這篇關(guān)于flask操作數(shù)據(jù)庫插件Flask-SQLAlchemy的使用的文章就介紹到這了,更多相關(guān)Flask-Sqlalchemy 使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python比較兩個(gè)列表大小的方法

    python比較兩個(gè)列表大小的方法

    這篇文章主要介紹了python比較兩個(gè)列表大小的方法,涉及Python針對列表的相關(guān)操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • python動(dòng)態(tài)加載變量示例分享

    python動(dòng)態(tài)加載變量示例分享

    這篇文章主要介紹了python動(dòng)態(tài)加載變量示例,需要的朋友可以參考下
    2014-02-02
  • Python使用xlrd實(shí)現(xiàn)讀取合并單元格

    Python使用xlrd實(shí)現(xiàn)讀取合并單元格

    這篇文章主要介紹了Python使用xlrd實(shí)現(xiàn)讀取合并單元格,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • pyspark操作MongoDB的方法步驟

    pyspark操作MongoDB的方法步驟

    這篇文章主要介紹了pyspark操作MongoDB的方法步驟,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • Python實(shí)現(xiàn)在Excel文件中寫入圖表

    Python實(shí)現(xiàn)在Excel文件中寫入圖表

    這篇文章主要為大家介紹了如何利用Python語言實(shí)現(xiàn)在Excel文件中寫入一個(gè)比較簡單的圖表,文中的實(shí)現(xiàn)方法講解詳細(xì),快動(dòng)手嘗試一下吧
    2022-05-05
  • 關(guān)于WARNING:Ignoring?invalid?distribution?-pencv-python....警告信息的處理方法(已解決!)

    關(guān)于WARNING:Ignoring?invalid?distribution?-pencv-python....

    這篇文章主要給大家介紹了關(guān)于WARNING:Ignoring?invalid?distribution?-pencv-python....警告信息的處理方法,文中通過圖文將解決的辦法介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-03-03
  • Python實(shí)現(xiàn)大樂透號碼隨機(jī)生成

    Python實(shí)現(xiàn)大樂透號碼隨機(jī)生成

    全國有很多彩民,其中購買最多的彩種分別是體彩大樂透和福彩雙色球。本篇文章將介紹Python實(shí)現(xiàn)彩票自由的全流程:隨機(jī)選取號碼+查看是否中獎(jiǎng),需要的可以參考一下
    2022-05-05
  • Python實(shí)現(xiàn)樹莓派攝像頭持續(xù)錄像并傳送到主機(jī)的步驟

    Python實(shí)現(xiàn)樹莓派攝像頭持續(xù)錄像并傳送到主機(jī)的步驟

    這篇文章主要介紹了Python實(shí)現(xiàn)樹莓派攝像頭持續(xù)錄像并傳送到主機(jī)的步驟,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-11-11
  • PyTorch中torch.manual_seed()的用法實(shí)例詳解

    PyTorch中torch.manual_seed()的用法實(shí)例詳解

    在Pytorch中可以通過相關(guān)隨機(jī)數(shù)來生成張量,并且可以指定生成隨機(jī)數(shù)的分布函數(shù)等,下面這篇文章主要給大家介紹了關(guān)于PyTorch中torch.manual_seed()用法的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • 基于Python編寫簡易文字語音轉(zhuǎn)換器

    基于Python編寫簡易文字語音轉(zhuǎn)換器

    這篇文章主要為大家介紹了如何利用Python編寫一個(gè)簡易文字語音轉(zhuǎn)換器,并打包成exe。文中的示例代碼講解詳細(xì),感興趣的小伙伴快跟隨小編一起嘗試一下
    2022-03-03

最新評論