Flask-SQLAlchemy 安裝及鏈接html
pip install flask-sqlalchemy前端
pip install flask-mysqldbpython
# 數據庫連接地址mysql
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql@127.0.0.1:3306/test'# 動態追蹤修改設置,如未設置只會提示警告sql
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True數據庫
字段類型:Integer,Float,String,Text,Boolean,Date,Timeflask
選項:primary_key,unique,index,nullablesession
關係選項:backref,primary join,order_by,secondary,secondary joinapp
使用數據庫增刪該查ui
#建立SQLAlchemy對象,讀取app中配置信息 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) #設置關係屬性,方便查詢使用 us = db.relationship('User', backref='role') #重寫__repr__方法,方便查看對象輸出內容 def __repr__(self): return 'Role:%s'% self.name if __name__ == '__main__': #刪除全部和db相關聯的表 db.drop_all() #建立全部和db相關聯的表 db.create_all() app.run(debug=True) # 一對多 class Role(db.Model): #關鍵代碼反向查尋 us = db.relationship('User', backref='role', lazy='dynamic') ... class User(db.Model): # 外鍵 role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
db.session.add(obj) 添加對象
db.session.delete(obj) 刪除對象
db.session.commit() 提交會話
db.session.rollback() 回滾
db.session.remove() 移除會話
filter(),Limit,order_by(),group_by()
all(),first(),count(),
User.query.filter_by(name='wang').all()
User.query.first()
User.query.all()
User.query.filter(User.name.endswith('g')).all() # 模糊
User.query.get(1) # 主鍵id=1
User.query.filter(User.name!='wang').all() # 不等與wang的
from sqlalchemy import not_
User.query.filter(not_(User.name=='chen')).all() # 取反
from sqlalchemy import and_, or_
User.query.filter(and_(User.name!='wang',User.email.endswith('163.com'))).all()#與
# 查詢後刪除 user = User.query.first() db.session.delete(user) db.session.commit() User.query.all() # 更新 user = User.query.first() user.name = 'dong' db.session.commit() User.query.first()
全局鉤子
# 導入表單擴展 生成form表單 自帶前端驗證 from wtforms import Form,StringField,PasswordField,SubmitField,validators # 自定義表單類 控制咱們的表單字段 class BookAddForm(Form): # 文本框 uname = StringField(label="用戶名:",validators=[validators.DataRequired()]) upass = PasswordField(label="密碼:") usub = SubmitField(label='註冊')
# upass = PasswordField()
‘’’html’’’
{# <p> {{ bookaddform.uname.label }}{{ bookaddform.uname }}</p>#}
{# <p> {{ bookaddform.upass.label }}{{ bookaddform.upass }}</p>#}
數據庫遷移
pip install flask-migrate
#這個命令會建立migrations文件夾,全部遷移文件都放在裏面。 from flask_script import Shell,Manager from flask_migrate import Migrate,MigrateCommand manager = Manager(app) app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql@127.0.0.1:3306/Flask_test' app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True db = SQLAlchemy(app) #第一個參數是Flask的實例,第二個參數是Sqlalchemy數據庫實例 migrate = Migrate(app,db) #manager是Flask-Script的實例,這條語句在flask-Script中添加一個db命令 manager.add_command('db',MigrateCommand) Manager.run()
命令:
python database.py db init // 遷移初始化
python database.py db migrate -m 'initial migration' // 命名和添加遷移
python database.py db upgrade // 提交到數據庫
python app.py db history // 返回之前的全部版本
輸出格式:<base> -> 版本號 (head), initial migration
回滾到指定版本
python app.py db downgrade 版本號
Rollback:
# 全部的數據處理準備好以後,執行commit纔會提交到數據庫! try: book_name = request.form.get('book_name') bo = Book(name=book_name,author_id=auth.id) # 添加書籍 db.session.add(bo) db.session.commit() except Exception as e: # 加入數據庫commit提交失敗,必須回滾!!! db.session.rollback() raise e