網址:http://docs.jinkan.org/docs/flask-sqlalchemy/
1.安裝:pip install flask
-
sqlalchemy 或者 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple
flask
-
sqlalchemy
2.如果連接的是 mysql 數據庫,需要安裝 mysqldb:pip install flask-mysqldb 或者pip install -i https://pypi.tuna.tsinghua.edu.cn/simple flask-mysqldb
3.建模:
mydb.py
from flask_sqlalchemy import SQLAlchemy #導入SQLAlchemy
from app import app #導入app
import os
basedir = os.path.abspath(os.path.dirname(__file__)) #當前文件的路徑
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///'+os.path.join(basedir,'data.sqlite') #配置連接什么類型的數據庫
# 動態追蹤修改設置,如未設置只會提示警告
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
#查詢時會顯示原始SQL語句
app.config['SQLALCHEMY_ECHO'] = True
db =SQLAlchemy(app) #實例化數據庫實例
#建表
class Role(db.Model):
__tablename__ = 'roles' #表名
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64), unique=True)
users = db.relationship('User',backref='role') #關系表,反向索引role ,創建一對多的一的那端
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)
role_id = db.Column(db.Integer,db.ForeignKey('roles.id')) #一對多的多的那端, 外鍵,外鍵為表的id,即roles.id
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
db.create_all() #創建數據庫
4.配置說明:
名字 備注 SQLALCHEMY_DATABASE_URI 用於連接的數據庫 URI 。例如:sqlite:////tmp/test.dbmysql://username:password@server/db SQLALCHEMY_BINDS 一個映射 binds 到連接 URI 的字典。更多 binds 的信息見用 Binds 操作多個數據庫。 SQLALCHEMY_ECHO 如果設置為Ture, SQLAlchemy 會記錄所有 發給 stderr 的語句,這對調試有用。(打印sql語句) SQLALCHEMY_RECORD_QUERIES 可以用於顯式地禁用或啟用查詢記錄。查詢記錄 在調試或測試模式自動啟用。更多信息見get_debug_queries()。 SQLALCHEMY_NATIVE_UNICODE 可以用於顯式禁用原生 unicode 支持。當使用 不合適的指定無編碼的數據庫默認值時,這對於 一些數據庫適配器是必須的(比如 Ubuntu 上 某些版本的 PostgreSQL )。 SQLALCHEMY_POOL_SIZE 數據庫連接池的大小。默認是引擎默認值(通常 是 5 ) SQLALCHEMY_POOL_TIMEOUT 設定連接池的連接超時時間。默認是 10 。 SQLALCHEMY_POOL_RECYCLE 多少秒后自動回收連接。這對 MySQL 是必要的, 它默認移除閑置多於 8 小時的連接。注意如果 使用了 MySQL , Flask-SQLALchemy 自動設定 這個值為 2 小時
5.常用的SQLAlchemy字段類型
類型名 python中類型 說明 Integer int 普通整數,一般是32位 SmallInteger int 取值范圍小的整數,一般是16位 BigInteger int或long 不限制精度的整數 Float float 浮點數 Numeric decimal.Decimal 普通整數,一般是32位 String str 變長字符串 Text str 變長字符串,對較長或不限長度的字符串做了優化 Unicode unicode 變長Unicode字符串 UnicodeText unicode 變長Unicode字符串,對較長或不限長度的字符串做了優化 Boolean bool 布爾值 Date datetime.date 時間 Time datetime.datetime 日期和時間 LargeBinary str 二進制文件
6.常用的SQLAlchemy列選項
選項名 說明 primary_key 如果為True,代表表的主鍵 unique 如果為True,代表這列不允許出現重復的值 index 如果為True,為這列創建索引,提高查詢效率 nullable 如果為True,允許有空值,如果為False,不允許有空值 default 為這列定義默認值
7.常用的SQLAlchemy關系選項
選項名 說明 backref 在關系的另一模型中添加反向引用 primary join 明確指定兩個模型之間使用的聯結條件 uselist 如果為False,不使用列表,而使用標量值 order_by 指定關系中記錄的排序方式 secondary 指定多對多關系中關系表的名字 secondary join 在SQLAlchemy中無法自行決定時,指定多對多關系中的二級聯結條件
8.連接不同類型的數據庫
數據庫引擎 URL Postgres postgresql://scott:tiger@localhost/mydatabase MySQL mysql://scott:tiger@localhost/mydatabase Oracle oracle://scott:tiger@127.0.0.1:1521/sidname SQLite (注意開頭的四個斜線) sqlite:////absolute/path/to/foo.db
9.