- ORM
- 對象關係映射,主要實現模型對象到關係數據庫數據的映射
- 優勢:面向對象編程,對數據庫的操做都轉化成對類屬性和方法的操做,不用編寫各類數據庫的sql語句
- 數據模型與數據庫的解耦,不在關注用的是mysql、oracle...等,經過簡單的配置就能夠輕鬆更換數據庫, 而不須要修改代碼
- 缺點是會有性能損失
- Flask-SQLAlchemy
- 安裝,這裏連接mysql:
- pip install flask-sqlalchemy
- pip install flask-mysqldb 若是安裝報錯使用sudo apt-get install python3.5-dev
- 配置:
- 必要的連接配置 app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://用戶名:密碼@127.0.0.1:3306/要鏈接的數據庫名'
- 其餘配置
- 動態追蹤修改設置,如未設置只會提示警告 app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
- 查詢時會顯示原始SQL語句 app.config['SQLALCHEMY_ECHO'] = True
- 使用
db = SQLAlchemy(app)
class User(db.Model):
__tablename__ = 'user'
id = db.Column(db.Integer,primary_key=True,autoincrement=True)
name = db.Column(db.String(50),nullable=False)
age = db.Column(db.Integer)
- 增刪查改
- 表增刪
- db.drop_all()
- db.create_all()
- 插入一條數據
- data1 = User(name='xxx',age=11)
- db.session.add(data1)
- db.session.commit()
- 插入多條
- db.session.add_all([列表])
- db.session.commit()
- 查詢
- User.query.get(1) 返回指定主鍵對應的行,如不存在,返回None
- User.query.all() 以列表形式返回查詢的全部結果
- User.query.first() 查詢第一個
- User.query.count() 返回查詢結果的數量
- User.query.filter_by(name='xxx').all() 返回名字等於xxx的全部人
- User.query.filter(User.name=='xxx').first() 返回名字等於xxx的第一我的,使用filter必須指明熟悉來自哪一個類,且用==鏈接
- User.query.filter(User.name.endswith('x')).all() 返回名字結尾字符爲x的全部數據 (開始startswith/包含contains)
- User.query.filter(User.name.startswith('x'), User.age.startswith('2')).all() 查詢名字x開頭和年齡2開頭的全部人
另一種寫法:User.query.filter(and_(User.name.startswith('x'), User.age.startswith('2'))).all()
- 使用and_ not_ or_必需要導入 from sqlalchemy import and_,not_,or_
- and_(1,2) 1和2兩個條件都成立
- or_(1,2) 1或者二任一成立
- not_() 取反
- User.query.filter(User.id.in_([1,3,5,7,9])).all() 查詢id爲 [1, 3, 5, 7, 9] 的全部數據 包含:in_([])
- User.query.order_by(User.age.desc()).all() 按年齡排序 desc:降序 aesc: 升序
- 分頁:pag = User.query.paginate(2, 3) 將全部數據分頁,查詢第二頁的數據,每頁三條
- pag.items 獲取當前頁碼的全部數據
- pag.page 獲取當前頁碼
- pag.pages 獲取總頁數
- 數據庫遷移
- 須要使用第三方包flask_script和flask_migrate from flask_script import Manager from flask_migrate import Migrate,MigrateCommand
- 遷移代碼配置:
- 1.配置數據庫及建立flask和數據庫對象
- 2.建立遷移對象 migrate = Migrate(app,db) 這裏傳入flask對象和數據庫對象
- 3.建立管理對象 manager = Manager(app) 使用flask_script的Manager管理app
- 4.添加遷移命令到管理對象 manager.add_command('add_db',MigrateCommand) 使add_db做爲命令行的遷移命令使用
- 5.使用manager.run()運行程序
- 遷移步驟:
- 1.初始化遷移操做:進入命令行,輸入python3 py文件名.py add_db init
- 2.建立遷移腳本並記錄當前版本號:輸入python3 py文件名.py add_db migrate -m '此處輸入版本標記,註釋'
- 3.更新數據庫,遷移確認:輸入python3 py文件名.py add_db upgrade
- 注意只須要第一次遷移時須要初始化操做,後續若是有修改直接操做2,3步便可
- 若是要回滾版本,可使用python3 py文件名.py add_db history命令查看歷史版本號
- 回滾版本使用命令python3 py文件名.py add_db downgrade 版本號