1. 程式人生 > >Flask中之數據庫框架和模型類一

Flask中之數據庫框架和模型類一

進行 default elf down val prim 序列 浮點 nic

Python數據庫框架

#  pip install flask-sqlalchemy****
    數據庫引擎              URL
   MySQL                    mysql://username:password@hostname/database
    Postgres                  postgresql://username:password@hostname/database
    SQLite(Unix)       sqlite:////absolute/path/to/database
  SQLite(Windows)    sqlite:///c:/absolute/path/to/database

#  在這些 URL 中,hostname 表示 MySQL 服務所在的主機,可以是本地主機(localhost),
# 也可以是遠程服務器。數據庫服務器上可以托管多個數據庫,因此 database 表示要使用的
#  數據庫名。如果數據庫需要進行認證,username 和 password 表示數據庫用戶密令。
#  示例  hello.py:配置數據庫
from flask.ext.sqlalchemy import SQLAlchemy
basedir = os.path.abspath(os.path.dirname(__file__))
app = Flask(__name__)
app.config[‘SQLALCHEMY_DATABASE_URI‘] = ‘sqlite:///‘ + os.path.join(basedir, ‘data.sqlite‘)
app.config[‘SQLALCHEMY_COMMIT_ON_TEARDOWN‘] = True
db = SQLAlchemy(app)
#  db 對象是 SQLAlchemy 類的實例,表示程序使用的數據庫,同時還獲得了 Flask-SQLAlchemy
# 提供的所有功能。
# 定義模型
示例 5-2 hello.py:定義 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 會使用一個默認名字,
#  但默認的表名沒有遵守使用復數形式進行命名的約定,
#  所以最好由我們自己來指定表名。其余的類變量都是該模型的屬性,被定義為#  db.Column
#  類的實例。
#  db.Column 類構造函數的第一個參數是數據庫列和模型屬性的類型。
    類型名                  Python類型                     說  明
Integer                   int 普通整數,              一般是 32 位
SmallInteger          int 取值範圍小的整數   一般是 16 位
BigInteger              int 或 long                    不限制精度的整數
Float                      float                              浮點數
Numeric                decimal.Decimal           定點數
String                    str                                 變長字符串
Text                       str               變長字符串,對較長或不限長度的字符串做了優化
Unicode                 unicode                    變長 Unicode 字符串
UnicodeText         unicode                對較長或不限長度的字符串做了優化
Boolean                 bool                           布爾值
Date                    datetime.date               日期
Time                    datetime.time               時間
DateTime           datetime.datetime          日期和時間
Interval                datetime.timedelta          時間間隔
Enum                   str                                   一 組字符串
PickleType           任何 Python 對象           自動使用 Pickle 序列化
LargeBinary         str                                   二進制文件
#  最常使用的SQLAlchemy列選項,也即約束條件

primary_key         如果設為 True,這列就是表的主鍵
unique                  如果設為 True,這列不允許出現重復的值
index                   如果設為 True,為這列創建索引,提升查詢效率
nullable                如果設為 True,這列允許使用空值;如果設為 False,這列不允許使用空值
default                 為這列定義默認值
doc                      字段說明 

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

Flask中之數據庫框架和模型類一