python-Web-flask-數據庫

3 數據庫:

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數據庫

字段類型:IntegerFloatStringTextBooleanDateTimeflask

選項:primary_keyuniqueindexnullablesession

關係選項:backrefprimary joinorder_bysecondarysecondary 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()Limitorder_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
相關文章
相關標籤/搜索