1. 程式人生 > >flask資料庫視覺化SQLite

flask資料庫視覺化SQLite

         Flask-SQLAlchemy 是一個 Flask 擴充套件,簡化了在 Flask 程式中使用 SQLAlchemy 的操作。SQLAlchemy 是一個很強大的關係型資料庫框架, 支援多種資料庫後臺。 SQLAlchemy 提供了高層 ORM,也提供了使用資料庫原生 SQL 的低層功能。

         和其他大多數擴充套件一樣, Flask-SQLAlchemy 也使用 pip 安裝:

(venv) $ pip install flask-sqlalchemy

        在 Flask-SQLAlchemy 中,資料庫使用 URL 指定。最流行的資料庫引擎採用的資料庫 URL格式如下表所示。

FLask-SQLAlchemy資料庫URL


        在這些 URL 中, hostname 表示 MySQL 服務所在的主機,可以是本地主機( localhost),也可以是遠端伺服器。 資料庫伺服器上可以託管多個數據庫,因此 database 表示要使用的資料庫名。如果資料庫需要進行認證, username 和 password 表示資料庫使用者密令。

        SQLite 資料庫不需要使用伺服器,因此不用指定 hostname、 username 和password。 URL 中的 database 是硬碟上檔案的檔名。

       程式使用的資料庫 URL 必須儲存到 Flask 配置物件的 SQLALCHEMY_DATABASE_URI 鍵中。配置物件中還有一個很有用的選項, 即 SQLALCHEMY_COMMIT_ON_TEARDOWN 鍵,將其設為 True時,每次請求結束後都會自動提交資料庫中的變動。

其他配置選項的作用請參閱 FlaskSQLAlchemy 的文件。如下展示瞭如何初始化及配置一個簡單的 SQLite 資料庫。
 hello.py: 配置資料庫

from flask.ext.sqlalchemy import SQLAlchemy

basedir = os.path.abspath(os.path.dirname(__file__))

app = Flask(__name__)
<strong>app.config['SQLALCHEMY_DATABASE_URI'] ='sqlite:///' + os.path.join(basedir, 'data.sqlite')</strong>
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
db = SQLAlchemy(app)

db 物件是 SQLAlchemy 類的例項,表示程式使用的資料庫,同時還獲得了 Flask-SQLAlchemy提供的所有功能。

如下為我使用SQLite的配置:

class DevelopmentConfig(Config):
    DEBUG = True
    SQLALCHEMY_DATABASE_URI = os.environ.get('DEV_DATABASE_URL') or \
        'sqlite:///' + os.path.join(basedir, 'data-dev.sqlite')


class TestingConfig(Config):
    TESTING = True
    SQLALCHEMY_DATABASE_URI = os.environ.get('TEST_DATABASE_URL') or \
        'sqlite:///' + os.path.join(basedir, 'data-test.sqlite')
    WTF_CSRF_ENABLED = False


class ProductionConfig(Config):
    SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or \
        'sqlite:///' + os.path.join(basedir, 'data.sqlite')

在3個子類中,SQLALCHEMY_DATABASE_URI變數都被制訂了不同的值。這樣程式就可以在不同的配置環境中執行,每個環境使用不同的資料庫。

定義模型
        模型
這個術語表示程式使用的持久化實體。 在 ORM 中,模型一般是一個 Python 類,類中的屬性對應資料庫表中的列。Flask-SQLAlchemy 建立的資料庫例項為模型提供了一個基類以及一系列輔助類和輔助函式,可用於定義模型的結構。

roles 表和 users 表的關係如下:


定義 Role 和 User 模型

class Role(db.Model):
  __tablename__ = 'roles'
 id = db.Column(db.Integer, primary_key=True)
 name = db.Column(db.String(64), unique=True)

 def __repr__(self):
    return '<Role %r>' % self.name

class User(db.Model):
 __tablename__ = 'users'
 id = db.Column(db.Integer, primary_key=True)
 username = db.Column(db.String(64), unique=True, index=True)

 def __repr__(self):
     return '<User %r>' % self.username

       類變數 __tablename__ 定義在資料庫中使用的表名。如果沒有定義 __tablename__, Flask-SQLAlchemy 會使用一個預設名字,但預設的表名沒有遵守使用複數形式進行命名的約定,所以最好由我們自己來指定表名。

      雖然沒有強制要求,但這兩個模型都定義了 __repr()__ 方法,返回一個具有可讀性的字串表示模型,可在除錯和測試時使用。

      其餘的類變數都是該模型的屬性,被定義為 db.Column類的例項。
db.Column 類建構函式的第一個引數是資料庫列和模型屬性的型別。下表列出了一些可用的列型別以及在模型中使用的 Python 型別。

最常用的SQLAlchemy列型別


db.Column 中其餘的引數指定屬性的配置選項。下表列出了一些最常使用的SQLAlchemy列選項


Flask-SQLAlchemy 要求每個模型都要定義主鍵,這一列經常命名為 id。

建立表

我們要讓 Flask-SQLAlchemy 根據模型類建立資料庫。方法是使用 db.create_all()函式:

(venv) $ python hello.py shell
>>> from hello import db
>>> db.create_all()

但是在命令列下操作資料庫非常不方便,因為看不到資料庫裡面的資料到底是什麼樣的,尤其在刪除的時候,會因為找不到物件的名字而操作失敗或者誤刪。所以介紹一個非常好用的視覺化SQLite資料庫,可以在此視覺化資料庫上執行煩人的查詢刪除,非常方便。

從下面的連結可以獲取SQLite視覺化的資料庫安裝檔案

安裝後不需要進行任何配置,直接開啟建立的資料庫檔案,如data.sqlite檔案,即可在此資料庫上執行各種操作。