SQLAlchemy系列教程:基本数据类型及自定义类型

在SQLAlchemy、Python SQL工具包和ORM中定义模型时,理解基本数据类型至关重要。本教程提供了在SQLAlchemy模型中有效使用内置基本类型的指南。

SQLAlchemy中的基本类型

SQLAlchemy支持一组与SQL数据库类型一致的基本数据类型。SQLAlchemy中的每种类型都为各种SQL类型提供了Python等价。
在这里插入图片描述

Integer

from sqlalchemy import create_engine, Integer, Column, MetaData, Table

engine = create_engine('sqlite:///:memory:')
metadata = MetaData()
table = Table('example', metadata,
               Column('id', Integer, primary_key=True)
)
metadata.create_all(engine)

String

from sqlalchemy import String

table.append_column(Column('name', String(50)))  # Appending new column to the 'table'
metadata.create_all(engine)

Numeric

from sqlalchemy import Numeric, Float

table.append_column(Column('price', Numeric(10, 2)))
table.append_column(Column('quantity', Float))
metadata.create_all(engine)

用TypeDecorator自定义类型

SQLAlchemy中的类型装饰器允许扩展和定制现有类型。让我们看看如何使用类型装饰器创建一个自定义的json编码类型。

from sqlalchemy.types import TypeDecorator, VARCHAR
import json

class JSONEncodedDict(TypeDecorator):
    """Enables JSON storage by encoding and decoding on the fly."""
    impl = VARCHAR

    def process_bind_param(self, value, dialect):
        if value is not None:
            value = json.dumps(value)
        return value

    def process_result_value(self, value, dialect):
        if value is not None:
            value = json.loads(value)
        return value

table.append_column(Column('attributes', JSONEncodedDict(255)))
metadata.create_all(engine)

高级数据类型

SQLAlchemy的高级数据类型包括枚举、数组等。这里我们将深入研究在SQLAlchemy中定义Enum和Array类型。

Enum类型

import enum
from sqlalchemy import Enum

class MyEnum(enum.Enum):
    foo = 1
    bar = 2
    baz = 3

table.append_column(Column('status', Enum(MyEnum)))
metadata.create_all(engine)

Array类型

# PostgreSQL specific example
from sqlalchemy.dialects.postgresql import ARRAY

table.append_column(Column('data_points', ARRAY(Integer)))
metadata.create_all(engine)

最后总结

在本教程中,我们探讨了SQLAlchemy中可用的一些基本和高级数据类型。通过从Integer到自定义类型装饰器的示例,本指南将帮助你使用SQLAlchemy为应用程序构建更健壮的模型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/982261.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

K8s The connection to the server 192.168.56.120:6443 was refused报错解决

虚拟机获取不到其他node节点的信息,通过使用docker ps -a 排查看到k8s的组件都是exited的状态,通过手动拉起docker 镜像id 起来之后,又变为exited的状态!!! 解决方法:重置k8s集群 使用 kubeadm…

随机树算法 自动驾驶汽车的路径规划 静态障碍物(Matlab)

随着自动驾驶技术的蓬勃发展,安全、高效的路径规划成为核心挑战之一。快速探索随机树(RRT)算法作为一种强大的路径搜索策略,为自动驾驶汽车在复杂环境下绕过静态障碍物规划合理路径提供了有效解决方案。 RRT 算法基于随机采样思想…

【实战 ES】实战 Elasticsearch:快速上手与深度实践-2.3.1 避免频繁更新(Update by Query的代价)

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 Elasticsearch数据更新与删除深度解析:2.3.1 避免频繁更新(Update by Query的代价)案例背景1. Update by Query的内部机制解析1.1 文档更…

Baklib内容中台赋能企业智管

内容中台构建全场景智管 现代企业数字化运营中,全域内容管理能力已成为核心竞争力。通过智能知识引擎驱动的内容中台架构,企业能够实现跨部门、多形态数据的统一归集与动态调度。以某制造企业为例,其利用中台系统将分散在CRM、ERP及内部文档…

今天来介绍和讨论 AGI(通用人工智能)

首先介绍,AGI(通用人工智能)是什么? AGI(Artificial General Intelligence,通用人工智能)指的是能够像人类一样理解、学习、推理和解决广泛任务的人工智能系统。与目前的AI不同,AGI可…

计算机毕业设计SpringBoot+Vue.js乐享田园系统(源码+文档+PPT+讲解)

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

navicat导出postgresql的数据库结构、字段名、备注等等

1、执行sql语句 SELECT A.attnum AS "序号",C.relname AS "表名",CAST ( obj_description ( relfilenode, pg_class ) AS VARCHAR ) AS "表名描述",A.attname AS "字段名称",A.attnotnull as "是否不为null",(case when A…

FPGA开发,使用Deepseek V3还是R1(9):FPGA的全流程(详细版)

以下都是Deepseek生成的答案 FPGA开发,使用Deepseek V3还是R1(1):应用场景 FPGA开发,使用Deepseek V3还是R1(2):V3和R1的区别 FPGA开发,使用Deepseek V3还是R1&#x…

DeepSeek、Grok 和 ChatGPT 对比分析:从技术与应用场景的角度深入探讨

文章目录 一、DeepSeek:知识图谱与高效信息检索1. 核心技术2. 主要特点3. 应用场景4. 实际案例 二、Grok:通用人工智能框架1. 核心技术2. 主要特点3. 应用场景4. 实际案例 三、ChatGPT:聊天机器人与通用对话系统1. 核心技术2. 主要特点3. 应用…

三、0-1搭建springboot+vue3前后端分离-idea新建springboot项目

一、ideal新建项目1 ideal新建项目2 至此父项目就创建好了,下面创建多模块: 填好之后点击create 不删了,直接改包名,看自己喜欢 修改包名和启动类名: 打开ServiceApplication启动类,修改如下: …

快速生成viso流程图图片形式

我们在写详细设计文档的过程中总会不可避免的涉及到时序图或者流程图的绘制,viso这个软件大部分技术人员都会使用,但是想要画的好看,画的科学还是比较难的,现在我总结一套比较好的方法可以生成好看科学的viso图(图片格式)。主要思…

【前端基础】Day 9 PC端品优购项目

目录 1. 品优购项目规划 1.1 网站制作流程 1.2 品优购项目整体介绍 1.3 学习目的 1.4 开发工具以及技术栈 1.5 项目搭建工作 1.6 网站favicon图标 1.7 网站TDK三大标签SEO优化 2. 品优购首页制作 2.1 常见模块类命名 2.2 快捷导航shortcut制作 2.3 header制作 2.4…

仿mudou库one thread oneloop式并发服务器

项目gitee:仿muduo: 仿muduo 一:项目目的 1.1项目简介 通过咱们实现的⾼并发服务器组件,可以简洁快速的完成⼀个⾼性能的服务器搭建。 并且,通过组件内提供的不同应⽤层协议⽀持,也可以快速完成⼀个⾼性能应⽤服务器…

一文学会Spring

一、Spring简介 Spring的优点 Spring是一个开源免费的框架、容器Spring是一个轻量级的框架,非侵入式的控制反转IOC、面向切面AOP支持事务 Spring是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器 二、IOC 2.1 IOC本质 控制反转IOC,是一种设计思想…

解决Spring Boot中LocalDateTime返回前端数据为数组结构的问题

在Spring Boot开发中,处理日期时间数据是一个常见的需求。Java 8 引入了新的日期时间API,如LocalDateTime,它提供了更强大的日期时间处理功能。然而,在将LocalDateTime对象序列化为JSON时,可能会遇到返回为数组结构的问…

【一个月备战蓝桥算法】递归与递推

字典序 在刷题和计算机科学领域,字典序(Lexicographical order)也称为词典序、字典顺序、字母序,是一种对序列元素进行排序的方式,它模仿了字典中单词的排序规则。下面从不同的数据类型来详细解释字典序: …

CSDN 1024天 创作纪念日

机缘 还记得那是2022年5月,在上家公司工作时候,意外发现同事在通过CSDN记录一些日常遇到、解决的问题,也会更新一些他擅长领域的知识点,并且收获了不少的粉丝和阅读量,这不由得激起了我的兴趣。也在有空时候&#xff…

用于管理 Elasticsearch Serverless 项目的 AI Agent

作者:来自 Elastic Fram Souza 由自然语言驱动的 AI 代理,可轻松管理 Elasticsearch Serverless 项目 - 支持项目创建、删除和状态检查。 这个小型命令行工具让你可以用简单的英语管理你的无服务器 Elasticsearch 项目。它通过AI(这里是 Ope…

机器学习数学通关指南

✨ 写在前面 💡 在代码的世界里沉浸了十余载,我一直自诩逻辑思维敏捷,编程能力不俗。然而,当我初次接触 DeepSeek-R1 并领略其清晰、系统的思考过程时,我不禁为之震撼。那一刻,我深刻意识到:在A…

< 自用文儿 > DELETED 设置速读 in Ubuntu24

systemctl 和 DELETED: 配置文件: vi /etc/systemd/system/ DELETED.service [Unit] DescriptionV2Ray Service Documentation DELETED Afternetwork.target nss-lookup.target[Service] #Usernobody CapabilityBoundingSetCAP_NET_ADMIN CAP_NET_BIN…