【SQLAlChemy】常见的数据类型有哪些,Column可选的参数有哪些呢?

2024-06-09 23:04

本文主要是介绍【SQLAlChemy】常见的数据类型有哪些,Column可选的参数有哪些呢?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

常见数据类型与Column参数

常见类型

  1. Integer:整数类型,对应数据库的 int 类型。
  2. Float:浮点数类型,对应数据库的 float 类型。它占用 32 位空间。
  3. Double:双精度浮点数类型,对应数据库的 double 类型,占用 64 位空间。需要注意的是在 SQLAlchemy 中没有 Double 类型。
  4. String:可变字符类型,对应数据库的 varchar 类型。
  5. Boolean:布尔类型,对应数据库的 tinyint 类型。
  6. DECIMAL:定点数类型,主要用于解决浮点数精度问题。在存储与金钱相关的字段时,推荐使用此数据类型。使用时需要传递两个参数,第一个参数表示字段能存储的总位数,第二个参数表示小数点后的位数。
  7. Enum:枚举类型,限制字段值只能为预设的几个值。在 ORM 模型中,使用 Enum 类型表示枚举。也可以用 Python3 内置的 enum 模块定义字段。
  8. Date:日期类型,只能存储年月日。对应数据库的 date 类型。在 Python 代码中,可以使用 datetime.date 来指定。
  9. DateTime:日期时间类型,可以存储年月日时分秒毫秒等。对应数据库的 datetime 类型。在 Python 代码中,可以使用 datetime.datetime 来指定。
  10. Time:时间类型,可以存储时分秒。对应数据库的 time 类型。在 Python 代码中,可以使用 datetime.time 来指定。
  11. Text:长字符串类型,一般可以存储超过 6 万个字符。如果超出这个范围,可以使用 LONGTEXT 类型。对应数据库的 text 类型。
  12. LONGTEXT:超长文本类型,对应数据库的 longtext 类型。

常见的 Column 参数

  1. primary_key:将此字段设置为主键,需要设定值为 True
  2. autoincrement:将此字段设置为自动递增,需设定值为 True
  3. default:为某个字段设置默认值,常用于如发布时间等字段。
  4. nullable:确定某个字段是否可以为空。默认值为 True,意味着该字段可以为空。
  5. unique:确定某个字段的值是否需唯一。默认值为 False
  6. onupdate:在更新数据时会调用这个参数指定的值或函数。初次插入数据时,不会使用 onupdate 的值,而是使用 default 的值。这个参数常用于 update_time 字段(每次数据更新时都需更新该字段的值)。
  7. name:指定 ORM 模型中的某个属性映射到表中的字段名。如果未指定,则会使用该属性的名称作为字段名。如果已指定,则会使用指定的值作为表字段名。该参数也可以作为位置参数,在第一个参数中指定,如:
    title = Column(String(50),name='title',nullable=False)
    或者
    title = Column('my_title',String(50),nullable=False)

样例实现

class News(Base):__tablename__ = 'news'# id 整数类型,限制主键自增id = Column(Integer, primary_key=True, autoincrement=True)# 标题 长度为 100 字符类型, 不能为空title = Column(String(100), nullable=False)# 作者电话 字符类型 唯一author_telephone = Column(String(11), unique=True, nullable=False)# 是否删除 整型,不能为空, 默认为 0is_delete = Column(Integer, nullable=False, default=0)# 是否公开 布尔类型, 不能为空, 默认为 Trueis_published = Column(Boolean, nullable=False, default=True)# 标题1 枚举类型 常规写法tag1 = Column(Enum('python', 'java', 'go', 'javascript'))# 标题2 枚举类型 另一种写法tag2 = Column(Enum(TagEnum))# 时间的三种类型created_at = Column(Date, default=datetime.datetime.now)updated_at = Column(DateTime, onupdate=datetime.datetime.now, default=datetime.datetime.now)published_at = Column(Time)# 文本的两种类型content1 = Column(Text)content2 = Column(LONGTEXT)

生成的数据库表字段如下:


生成的 SQL 语句如下:

create table news
(id               int auto_incrementprimary key,title            varchar(100)                                      not null,author_telephone varchar(11)                                       not null,is_delete        int                                               not null,is_published     tinyint(1)                                        not null,tag1             enum ('python', 'java', 'go', 'javascript')       null,tag2             enum ('python', 'java', 'c', 'javascript', 'cpp') null,created_at       date                                              null,updated_at       datetime                                          null,published_at     time                                              null,content1         text                                              null,content2         longtext                                          null,constraint author_telephoneunique (author_telephone)
);

测试样例

新增一条数据,并更新相关字段值。

# 新建一个会话对象
session = sessionmaker(bind=engine)()# 创建一个 new 对象
new_demo = News(title='测试new',author_telephone='15991367893',is_delete=0,is_published=True,tag1='go',tag2=TagEnum.c,created_at=datetime.datetime.now(),updated_at=datetime.datetime.now(),published_at=datetime.time(),content1='这是一个测试性内容1',content2='这是一个测试性内容2')# session.add(new_demo)
# session.commit()
# session.close()# 测试 onupdate 参数
a_new = session.query(News).first()
a_new.title = '这是修改后的标题'
a_new.author_telephone = '15991367894'
# 提交事物
session.commit()
session.close()

注意

我们设置了author_telephone此处有些不足,不能满足正常开发需求,切忌在项目中使用。

这篇关于【SQLAlChemy】常见的数据类型有哪些,Column可选的参数有哪些呢?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1046550

相关文章

Redis 基本数据类型和使用详解

《Redis基本数据类型和使用详解》String是Redis最基本的数据类型,一个键对应一个值,它的功能十分强大,可以存储字符串、整数、浮点数等多种数据格式,本文给大家介绍Redis基本数据类型和... 目录一、Redis 入门介绍二、Redis 的五大基本数据类型2.1 String 类型2.2 Hash

Python 常用数据类型详解之字符串、列表、字典操作方法

《Python常用数据类型详解之字符串、列表、字典操作方法》在Python中,字符串、列表和字典是最常用的数据类型,它们在数据处理、程序设计和算法实现中扮演着重要角色,接下来通过本文给大家介绍这三种... 目录一、字符串(String)(一)创建字符串(二)字符串操作1. 字符串连接2. 字符串重复3. 字

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型

Redis高性能Key-Value存储与缓存利器常见解决方案

《Redis高性能Key-Value存储与缓存利器常见解决方案》Redis是高性能内存Key-Value存储系统,支持丰富数据类型与持久化方案(RDB/AOF),本文给大家介绍Redis高性能Key-... 目录Redis:高性能Key-Value存储与缓存利器什么是Redis?为什么选择Redis?Red

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

深度解析Java @Serial 注解及常见错误案例

《深度解析Java@Serial注解及常见错误案例》Java14引入@Serial注解,用于编译时校验序列化成员,替代传统方式解决运行时错误,适用于Serializable类的方法/字段,需注意签... 目录Java @Serial 注解深度解析1. 注解本质2. 核心作用(1) 主要用途(2) 适用位置3

Python ORM神器之SQLAlchemy基本使用完全指南

《PythonORM神器之SQLAlchemy基本使用完全指南》SQLAlchemy是Python主流ORM框架,通过对象化方式简化数据库操作,支持多数据库,提供引擎、会话、模型等核心组件,实现事务... 目录一、什么是SQLAlchemy?二、安装SQLAlchemy三、核心概念1. Engine(引擎)

python中的显式声明类型参数使用方式

《python中的显式声明类型参数使用方式》文章探讨了Python3.10+版本中类型注解的使用,指出FastAPI官方示例强调显式声明参数类型,通过|操作符替代Union/Optional,可提升代... 目录背景python函数显式声明的类型汇总基本类型集合类型Optional and Union(py

Go语言使用Gin处理路由参数和查询参数

《Go语言使用Gin处理路由参数和查询参数》在WebAPI开发中,处理路由参数(PathParameter)和查询参数(QueryParameter)是非常常见的需求,下面我们就来看看Go语言... 目录一、路由参数 vs 查询参数二、Gin 获取路由参数和查询参数三、示例代码四、运行与测试1. 测试编程路