zoukankan      html  css  js  c++  java
  • ORM SQLAlchemy 简介

    对象关系映射(Object Relational Mapping,简称ORM
    使用DB-API访问数据库,需要懂 SQL 语言,能够写 SQL 语句,如果不想懂 SQL,又想使用关系型数据库,可以使用 ORM,一个 ORM , 它的一端连着 Database, 一端连着 Python DataObject 对象。有了 ORM,可以通过对 Python 对象的操作,实现对数据库的操作,不需要直接写 SQL 语句。ORM 会自动将 Python 代码转换成对应的 SQL 语句。其余的操作,包括数据检查,生成 SQL 语句、事务控制、回滚等交由 ORM 框架来完成。当然,ORM 还是可以执行原始的 SQL 语句,以便执行一些复杂的/特别的操作

    程序使用的数据库 URL 必须保存到 Flask 配置对象的 SQLALCHEMY_DATABASE_URI 键中

    配置对象中还有一个很有用的选项,即 SQLALCHEMY_COMMIT_ON_TEARDOWN 键,将其设为 True时,每次请求结束后都会自动提交数据库中的变动

    最常用的SQLAlchemy列类型

    类型名Python类型说 明
    Integer int 普通整数,一般是 32 位
    SmallInteger int 取值范围小的整数,一般是 16 位
    BigInteger int 或 long 不限制精度的整数
    Float float 浮点数
    Numeric decimal.Decimal 定点数
    String str 变长字符串
    Text str 变长字符串,对较长或不限长度的字符串做了优化
    Unicode unicode 变长 Unicode 字符串
    UnicodeText unicode 变长 Unicode 字符串,对较长或不限长度的字符串做了优化
    Boolean bool 布尔值
    Date datetime.date 日期
    Time datetime.time 时间
    DateTime datetime.datetime 日期和时间
    Interval datetime.timedelta 时间间隔
    Enum str 一组字符串
    PickleType 任何 Python 对象 自动使用 Pickle 序列化
    LargeBinary str

    二进制文件

    最常使用的SQLAlchemy列选项

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

    在 ORM 中,模型一般是一个 Python 类, 代表数据库中的一张表, 类中的属性对应数据库表中的列。下面的例子定义了两个表,一个是用户角色,一个是用户信息

    class Role(db.Model):
    __tablename__ = 'roles'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), unique=True)

    def __repr__(self):
    return '<Role %r>' % self.name

    class User(db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), unique=True, index=True)

    def __repr__(self):
    return '<User %r>' % self.username

    类变量__tablename__定义在数据库中使用的表名。如果没有定义__tablename__,Flask-SQLAlchemy 会使用一个默认名字,但默认的表名没有遵守 使用复数形式进行命名(加 s ) 的约定, 所以最好由我们自己来指定表名。
    其余的类变量都是该 模型的属性/表的列,被定义为 db.Column 类的实例。
    db.Column 类构造函数的第一个参数是数据库表列/模型属性 的类型


    db.Column 中其余的参数指定属性的配置选项。

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

    在Flask 中通过 Python 的类定义数据库的表

    from flask.ext.sqlalchemy import SQLAlchemy # 从 flask 扩展中导入 SQLAlchemy
    
    db = SQLAlchemy()
    
    class Post(db.Model):
        __tablename__ = 'posts'
        id = db.Column(db.Integer, primary_key=True)
        body = db.Column(db.Text) # 博客正文,不限长度
        timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow) # 发布博文的时间
        body_html = db.Column(db.Text) # 存放转换后的 HTML 代码
        author_id = db.Column(db.Integer, db.ForeignKey('users.id')) # 外键使用 ForeignKey,指向 User 表的 id
    
        comments = db.relationship('Comment', backref='post', lazy='dynamic')

  • 相关阅读:
    学习计划(一)——JavaScript 殷的博客
    学习计划——巩固基础+进阶练习 殷的博客
    第二章:在HTML中使用JavaScript 殷的博客
    W3Cschool学习笔记——CSS教程 殷的博客
    W3Cschool学习笔记——HTML5基础教程 殷的博客
    PS切图篇(一)界面设置 殷的博客
    W3Cschool学习笔记——CSS3教程 殷的博客
    PHP Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING
    css怎么让图片垂直左右居中?(外层div是浮动且按照百分比排列)
    在各浏览器和各分辨率下如何让div内的table垂直水平居中?
  • 原文地址:https://www.cnblogs.com/sysnap/p/6439111.html
Copyright © 2011-2022 走看看