Advertisement

python全栈011-----SQLAlchemy-ORM介绍,使用SQLAlchemy创建表

阅读量:

SQLAlchemy-ORM介绍

ORM介绍

随着项目规模不断扩大,在代码中会出现大量SQL语句,并对项目的整体进展非常不利

  • SQL语句的重复利用率普遍较低
  • 复杂程度高的SQL语句往往涉及较多的条件
  • 在这种情况下会导致产生大量相似的SQL语句
  • 许多常见的SQL语句是通过分析业务需求逐步构建而成的
  • 在调整数据库结构时需要相应地修改相关的业务逻辑流程
  • 编写SQL代码时必须注意Web安全问题的重要性

ORM即Object Relationship Mapping(ORl),是一种用于描述实体间关联关系的技术方案,在实践应用中通常采用面向对象编程的方法实现这一目标;利用ORM技术,则可通过定义类来表示数据库表,并将数据行视为该类的具体实例;与此同时,在设计过程中需要明确将"表"对应为"对象"、"数据行"对应为"实例"以及"字段名"对应为"属性名"等核心要素;基于此,在执行对象操作时最终会将相应的操作转换为数据库内建的SQL指令。

使用ORM的优点

  • 易用性:基于ORM框架进行数据库开发能够显著降低SQL语句的使用频率,并使编写出的数据库模型更加直观易懂。
  • 性能损耗小:系统运行效率不会因此而受到影响。
  • 设计灵活:方便编写复杂的查询逻辑。
  • 可移植性:该框架通过封装底层实现支持多种关系型数据库体系结构,并兼容MySQL以及SQLite等多种主流数据库系统。

使用SQLAlchemy

概念

概念 对应数据库 说明
Engine 连接 驱动引擎
Session 连接池、事务 由此开始查询
Model 类定义
Column
Query 若干行 可以链式添加多个条件

常见数据类型

数据类型 数据库数据类型 python数据类型 说明
Integer int int 整形,32位
String varchar string 字符串
Text text string 长字符串
Float float float 浮点型
Boolean tinyint bool True/False
Date date datetime.date 存储时间年月日
DateTime datetime datetime.datetime 存储年月日时分秒毫秒等
Time time datetime.datetime 存储时分秒

为了利用ORM来管理数据库操作,我们需要先建立一个与目标数据库表相对应的类,并在此类中定义相应的字段以反映数据库中的数据结构

创建表

创建连接

复制代码
 from sqlalchemy import create_engine

    
  
    
 # 数据库的配置变量
    
 # 地址
    
 HOSTNAME = '127.0.0.1'
    
 # 数据库
    
 DATABASE = 'flask_demo'
    
 # 端口
    
 PORT = 3306
    
 # 用户名和密码
    
 USERNAME = 'root'
    
 PASSWORD = 'root'
    
  
    
 DB_URL = 'mysql+pymysql://{}:{}@{}:{}/{}'.format(USERNAME,PASSWORD,HOSTNAME,PORT,DATABASE)
    
  
    
 engine = create_engine(DB_URL)

导入库

复制代码
    from sqlalchemy.ext.declarative import declarative_base

创建数据库表类(模型)

复制代码
 # 都要继承这个函数生成的基类

    
 Base = declarative_base(engine)
    
  
    
 class Sudents(Base):
    
     __tabalename__ = 'student'
  • declarative_base()是sqlalchemy内部封装的一个方法,通过其构造一个基类,这个基类和它的子类,可以将Python类和数据库表关联映射起来。
    • 首先作为一个数据库表必须要有一个表名,在sqlalchemy中表名的定义为__tablename__
    • 数据库表模型类通过__tablename__和表关联起来,Column表示数据表的列。
    • 通过把表格映射成类,把类作为一个表格映射到MySQL里
    • 接着我们创建字段,倒入包
复制代码
    from sqlalchemy import Column,Integer,String
  • Column表示数据表的列
    • 接着我们创建数据表的属性
复制代码
 class Sudents(Base):

    
     __tabalename__ = 'student'
    
  
    
     id = Column(Integer,primary_key=True,autoincrement=True) #传递参数Integer作为这个数据的一个类型约束,主键,自增
    
     name = Column(String(50),nullable=False) #可以为空为False。就是不能是空的
    
     gender = Column(Integer,default=1,comment='1为男,2为女') # 性别我们一般不会在表格中存入男或女,一般都以1或2的形式来表示,default=1代表如果没有传入参数,那么默认为1

在数据类型系统中,Integer、String等变量主要用于定义数据类型。其中primary_key字段具有自增特性;该字段支持自增功能;其中括号内的数值(如50)表示字符串的最大长度;当设置为False时,默认不允许字段为空;若设置为True,则表示允许字段为空;若未指定,默认值通常设为1;注释用于对代码进行说明或解释;如下图所示

生成数据库表

  • 我们把创建的表映射到数据库:模型映射到数据库中
复制代码
    Base.metadata.create_all()
  • 在SQLyog中查看表是否创建成功

成功!

全部评论 (0)

还没有任何评论哟~