zoukankan      html  css  js  c++  java
  • python-Web-flask-数据库

    3 数据库:

    Flask-SQLAlchemy 安装及连接

    pip install flask-sqlalchemy

    pip install flask-mysqldb

    # 数据库链接地址

    app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql@127.0.0.1:3306/test'# 动态追踪修改设置,如未设置只会提示警告

    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True

    字段类型:IntegerFloatStringTextBooleanDateTime

    选项:primary_keyuniqueindexnullable

    关系选项:backrefprimary joinorder_bysecondarysecondary join

     

    使用数据库增删该查

    #创建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
  • 相关阅读:
    bootstrap组件的案例代码
    bootstrap样式代码案例
    bootstrap组件
    bootstrap样式
    响应式布局
    使用java将字符串写入到指定的文件中
    使用java读取文件并输出
    使用java解析XML文件的步骤
    数据访问层
    Python:进程
  • 原文地址:https://www.cnblogs.com/person1-0-1/p/11400672.html
Copyright © 2011-2022 走看看