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)
还没有任何评论哟~
