1.安裝Flask SQLAlchemy,pymyql驅動 2.使用Flask SQLAlchemy Flask SQLAlchemy資料庫URL 常用的資料庫引擎: 資料庫引擎 | URL | MySql | mysql+pymysql://username:password@host/datab ...
1.安裝Flask-SQLAlchemy,pymyql驅動
pip install flask-sqlalchemy
pip intall pymysql
2.使用Flask-SQLAlchemy
Flask-SQLAlchemy資料庫URL
常用的資料庫引擎:
資料庫引擎 | URL
---|---
MySql | mysql+pymysql://username:password@host/database
Postgres | postgresql://username:password@host/database
#導入模塊
from flask_sqlalchemy import SQLAlchemy
import pymysql
#創建flask對象
app = Flask(__name__)
#配置flask配置對象中鍵:SQLALCHEMY_DATABASE_URI
app.config['SQLALCHEMY_DATABASE_URI'] = "mysql+mysql://username:password@hostname/database"
#配置flask配置對象中鍵:SQLALCHEMY_COMMIT_TEARDOWN,設置為True,應用會自動在每次請求結束後提交資料庫中變動
app.config['SQLALCHEMY_COMMIT_TEARDOWN'] = Ture
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
#獲取SQLAlchemy實例對象,接下來就可以使用對象調用數據
db = SQLAlchemy(app)
3.sqlalchemy列常見參數
選擇項 | 說明 |
---|---|
autoincrement | True 是否自增 |
primary_key | True 是否是主鍵 |
indexE | TRUE 是否是索引 |
unique | True 是否是唯一 |
nullable | True 是否允許欄位為空 |
default | 預設值 |
4.欄位類型
類型名稱 | python類型 | 描述 |
---|---|---|
Integer | int | 常規整型,通常為32位 |
SmallInteger | int | 短整型,通常為16位 |
BigInteger | int或long | 精度不受限整型 |
Float | float | 浮點型 |
Numeric | decimal | 定點數 |
String | str | 可變長度字元串 |
Text | str | 可變長度字元串,適合大量文本 |
Unicode | unicode | 可變長度Unicode字元串 |
Boolean | bool | 布爾值 |
Date | datetime.date | 日期類型 |
Time | datetime.time | 時間類型 |
DateTime | datetime.datetime | 日期時間類型 |
Interval | datetime.timedate | 時間間隔 |
Enum | str | 字元列表 |
PickleType | 任意Python對象 | 自動Pickle序列化 |
LargeBinary | str | 二進位 |
5.使用sqlalchemy
from app import db
#創建模型對象
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
def __repr__(self):
return '<User %r>' % self.username
# 1.創建表
db.create_all()
# 2.增加記錄
admin = User(username='admin', email='[email protected]')
guest = User(username='guest', email='[email protected]')
db.session.add(admin)
db.session.add(guest)
db.session.commit()
#3.查詢記錄,註意查詢返回對象,如果查詢不到返回None
User.query.all() #查詢所有
User.query.filter_by(username='admin').first()#條件查詢
User.query.order_by(User.username).all()#排序查詢
User.query.limit(1).all()#查詢1條
User.query.get(id = 123)#精確查詢
# 4.刪除
user = User.query.get(id = 123)
db.session.delete(user)
db.session.commit()