美文网首页
5.数据库小结

5.数据库小结

作者: 郑司令 | 来源:发表于2017-10-08 17:26 被阅读0次

    用的是flask_sqlalchemy,由于对pymysql有依赖,因此需要做如下声明:

    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy
    
    import pymysql
    pymysql.install_as_MySQLdb()
    

    然后就是创建APP:

    app = Flask(__name__)
    

    然后就是定义数据表类型。数据表类型有几个固定的格式:

    class TableName(db.Model):
        __tablename__ = 'tablename'  #数据表的名字
        id = db.Column(db.Integer, primary_key = True)
    
        name1 = db.Column(db.String(64), unique = True)
        name2 = db.Column(db.Float, unique = True)
        #...
    
        def __repr__(self):
            return '<Role %r>' % self.name
    
    __tablename__:定义在数据库中使用的表名。
    __repr__:返回一个可以用来表示对象的可打印字符串。
    

    关系型数据库:使用关系,将不同表中的行联系起来。因此在之前创建的表类中,添加以下关系声明。

    class Role(db.Model):
        #...
        users = db.relationship('User', backref = 'role')
    class User(db.Model):
        #...
        role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
    
    users = db.relationship('User', backref = 'role')#用来声明与User建立关系(通道)
    role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))#此处建立一个名为role_id的列,类型为整型,内容为外键获得的值。
    

    这个backref和roles.id还是需要单独拎出来说一下。
    users = db.relationship('User', backref = 'role')中的users可以任意,User相当于建立关系的对象类。说的通俗一点,只要是User类创建的表,都有权限通过外键访问‘我’。backref等说完db.ForeignKey再说。
    db.ForeignKey('roles.id')中的roles相当于要建立反向联系的表名。我们之前通过Role类创建了名为roles的表,那么此处要访问表中的id,自然就是roles.id了,这样就清楚了。
    那么relationship中的backref又是什么意思呢?backref相当于定义了一个变量。必须通过这个变量,才能对表进行更新。看例子就明白了:

    users = db.relationship('User', backref = 'role')
    
    abc = User(username = 'John', role = 2)
    

    数据库操作:
    创建表:

    db.crease_all()
    

    插入行

    admin_role = Role(name = 'Admin')
    mod_role = Role(name = 'Moderator')
    user_role = Role(name = 'User')
    
    user_john = User(username = 'john', role = admin_role)
    user_susan = User(username = 'susan', role = user_role)
    user_david = User(username = 'david', role = user_role)
    
    db.session.add_all([admin_role, mod_role, user_role, user_john, user_susan, user_david])
    
    db.session.commit()
    

    查询行:

    Role.query.过滤器.查询执行函数
    常用过滤器:filter() filter_by() limit() offset() order_by() group_by
    常用查询执行函数:all() first() first_or_404() get() get_or_404() count() paginate()
    若无过滤器,则默认为所有。若无执行函数,则默认为all()
    

    使用查询行,可以获得该行:

    user_role = Role.query.filter_by(name = 'User').first()
    通过user_role可以对行进行修改删除操作。
    所以,不讲查询先讲修改删除的都是耍流氓。
    

    修改行

    admin_role.name  = 'Administrator'
    db.session.add(admin_role)
    db.session.commit()
    

    删除行

    db.session.delete(admin_role)
    db.session.commit()
    

    相关文章

      网友评论

          本文标题:5.数据库小结

          本文链接:https://www.haomeiwen.com/subject/mxdsyxtx.html