zoukankan      html  css  js  c++  java
  • flask数据库基本操作

    常用的SQLAlchemy字段类型

    类型名python中类型说明
    Integer int 普通整数,一般是32位
    SmallInteger int 取值范围小的整数,一般是16位
    BigInteger int或long 不限制精度的整数
    Float float 浮点数
    Numeric decimal.Decimal 普通整数,一般是32位
    String str 变长字符串
    Text str 变长字符串,对较长或不限长度的字符串做了优化
    Unicode unicode 变长Unicode字符串
    UnicodeText unicode 变长Unicode字符串,对较长或不限长度的字符串做了优化
    Boolean bool 布尔值
    Date datetime.date 时间
    Time datetime.datetime 日期和时间
    LargeBinary str 二进制文件

    常用的SQLAlchemy列选项

    选项名说明
    primary_key 如果为True,代表表的主键
    unique 如果为True,代表这列不允许出现重复的值
    index 如果为True,为这列创建索引,提高查询效率
    nullable 如果为True,允许有空值,如果为False,不允许有空值
    default 为这列定义默认值

    常用的SQLAlchemy关系选项

    选项名说明
    backref 在关系的另一模型中添加反向引用
    primary join 明确指定两个模型之间使用的联结条件
    uselist 如果为False,不使用列表,而使用标量值
    order_by 指定关系中记录的排序方式
    secondary 指定多对多中记录的排序方式
    secondary join 在SQLAlchemy中无法自行决定时,指定多对多关系中的二级联结条件
    复制代码
    # coding:utf-8
    
    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy
    
    
    app = Flask(__name__)
    
    # mysql中创建数据库命令
    # mysql>create database db_python04 default charset=utf-8;
    复制代码
    复制代码
    class Config(object):
        """配置参数"""
        # sqlalchemy的配置参数
        SQLALCHEMY_DATABASE_URI = "mysql://root:mysql@127.0.0.1:3306/db_python04"
    
        # 设置sqlalchemy自动更跟踪数据库
        SQLALCHEMY_TRACK_MODIFICATIONS = True
    
    
    app.config.from_object(Config)
    
    # 创建数据库sqlalchemy工具对象
    db = SQLAlchemy(app)
    复制代码
    复制代码
    class Role(db.Model):
        """用户角色/身份表"""
        __tablename__ = "tbl_roles"
    
        id = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.String(32), unique=True)

       # backref 反向查找的是role对象,这个字段在数据库表中不存在的 users = db.relationship("User", backref="role")    # 定义之后,可以让显示对象的时候更直观 def __repr__(self): """ 定义之后,可以让显示对象的时候更直观 """ return "Role object: name=%s" % self.name # 表名的常见规范 # ihome -> ih_user 数据库名缩写_表名 # tbl_user tbl_表名 # 创建数据库模型类 class User(db.Model): """用户表""" __tablename__ = "tbl_users" # 指明数据库的表名 id = db.Column(db.Integer, primary_key=True) # 整型的主键,会默认设置为自增主键 name = db.Column(db.String(64), unique=True) email = db.Column(db.String(128), unique=True) password = db.Column(db.String(128)) role_id = db.Column(db.Integer, db.ForeignKey("tbl_roles.id")) def __repr__(self): return "User object: name=%s" % self.name
    复制代码

    数据迁移

    复制代码
    if __name__ == '__main__':
        # 清除数据库里的所有数据
        db.drop_all()
    
        # 创建所有的表
        db.create_all()
    复制代码

    添加数据

    复制代码
        # 创建对象
        role1 = Role(name="admin")
        # session记录对象任务
        db.session.add(role1)
        # 提交任务到数据库中
        db.session.commit()
    
        role2 = Role(name="stuff")
        db.session.add(role2)
        db.session.commit()
    
        us1 = User(name='wang', email='wang@163.com', password='123456', role_id=role1.id)
        us2 = User(name='zhang', email='zhang@189.com', password='201512', role_id=role2.id)
        us3 = User(name='chen', email='chen@126.com', password='987654', role_id=role2.id)
        us4 = User(name='zhou', email='zhou@163.com', password='456789', role_id=role1.id)
    
        # 一次保存多条数据
        db.session.add_all([us1, us2, us3, us4])
        db.session.commit()
  • 相关阅读:
    [转]xshell实现端口转发
    Windows下gvim配置
    Linux环境下段错误的产生原因及调试方法小结
    elasticsearch的服务器响应异常及应对策略
    scp不可用:WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED
    windows下python安装pyquery
    python实现简单爬虫功能
    关于Elasticsearch单个索引文档最大数量问题
    pthread_mutex_lock
    一道模拟题:改进的Joseph环
  • 原文地址:https://www.cnblogs.com/zyq6/p/11810119.html
Copyright © 2011-2022 走看看