SQLAlchemy常用数据类型

目录

SQLAlchemy常用数据类型

 代码演示

 代码分析


SQLAlchemy常用数据类型

SQLAlchemy 是一个Python的SQL工具库和对象关系映射(ORM)工具,它提供了一种在Python中操作数据库的高效方式。下面是SQLAlchemy中常用的一些数据类型:

  • Integer:整形,映射到数据库中是int类型。

    • Integer:普通整数类型。

    • SmallInteger:小整数类型。

from sqlalchemy import Integer, SmallInteger
  • Float:浮点类型,映射到数据库中是float类型。他占据的32位。

from sqlalchemy import Float
  • Double:双精度浮点类型,映射到数据库中是double类型,占据64位 (SQLALCHEMY中没有)。

  • String:可变字符类型,映射到数据库中是varchar类型.

from sqlalchemy import String, Text
  • Boolean:布尔类型,映射到数据库中的是tinyint类型。

from sqlalchemy import Boolean
  • DECIMAL:定点类型。是专门为了解决浮点类型精度丢失的问题的。在存储钱相关的字段的时候建议大家都使用这个数据类型。

    • 这个类型使用的时候需要传递两个参数,第一个参数是用来标记这个字段总能能存储多少个数字,第二个参数表示小数点后有多少位。
  • Enum:枚举类型。指定某个字段只能是枚举中指定的几个值,不能为其他值。在ORM模型中,使用Enum来作为枚举,示例代码如下:
 class News(Base):__tablename__ = 't_news'tag = Column(Enum("python",'flask','django'))

在Python3中,已经内置了enum这个枚举的模块,我们也可以使用这个模块去定义相关的字段。示例代码如下:

class TagEnum(enum.Enum):python = "python"flask = "flask"django = "django"class News(Base):__tablename__ = 't_news'id = Column(Integer,primary_key=True,autoincrement=True)tag = Column(Enum(TagEnum))news = News(tag=TagEnum.flask)

  • Date:存储时间,只能存储年月日。映射到数据库中是date类型。在Python代码中,可以使用datetime.date来指定。

  • DateTime:存储时间,可以存储年月日时分秒毫秒等。映射到数据库中也是datetime类型。在Python代码中,可以使用datetime.datetime来指定。

  • Time:存储时间,可以存储时分秒。映射到数据库中也是time类型。在Python代码中,可以使用datetime.time来至此那个。示例代码如下:

class News(Base):__tablename__ = 't_news'create_time = Column(Time)news = News(create_time=time(hour=11,minute=11,second=11))
  • Text:存储长字符串。一般可以存储6W多个字符。如果超出了这个范围,可以使用LONGTEXT类型。映射到数据库中就是text类型。

  • LONGTEXT:长文本类型,映射到数据库中是longtext类型。

 代码演示

from sqlalchemy import create_engine,Column,Integer,String,Float,Enum,Boolean,DECIMAL,Text,Date,DateTime,Time
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.dialects.mysql import LONGTEXT
from sqlalchemy.orm import sessionmakerimport enum
from datetime import date
from datetime import datetime
from datetime import time
#准备数据库的一堆信息   ip  port   user  pwd  数据库的名称  按要求组织格式
HOSTNAME = '127.0.0.1'
PORT = '3306'
DATABASE = 'first_sqlalchemy'
USERNAME = 'root'
PASSWORD = 'root'#dialect+driver://username:password@host:port/database?charset=utf8
#按照上述的格式来 组织数据库信息
DB_URI ="mysql+pymysql://{username}:{password}@{host}:{port}/{db}?charset=utf8".\format(username=USERNAME,password=PASSWORD,host=HOSTNAME,port=PORT,db=DATABASE)#创建数据库引擎
engine = create_engine(DB_URI)
#创建会话对象
session = sessionmaker(engine)()
#定义一个枚举类
class TagEnum(enum.Enum):python="PYHTON2"flask="FLASK2"django ="DJANGO"#创建一个ORM模型   说明基于sqlalchemy  映射到mysql数据库的常用字段类型有哪些?
Base = declarative_base(engine)
class News(Base):__tablename__='news'id = Column(Integer,primary_key=True,autoincrement=True)price1 = Column(Float) #存储数据时存在精度丢失问题price2 = Column(DECIMAL(10,4))title = Column(String(50))is_delete =Column(Boolean)tag1 =Column(Enum('PYTHON','FLASK','DJANGO')) #枚举常规写法tag2 =Column(Enum(TagEnum)) #枚举另一种写法create_time1=Column(Date)create_time2=Column(DateTime)create_time3=Column(Time)content1 =Column(Text)content2 =Column(LONGTEXT)# Base.metadata.drop_all()
# Base.metadata.create_all()#新增数据到表news中
# a1 = News(price1=1000.0078,price2=1000.0078,title='测试数据',is_delete=True,tag1="PYTHON",tag2=TagEnum.flask,
#        create_time1=date(2018,12,12),create_time2=datetime(2019,2,20,12,12,30),create_time3=time(hour=11,minute=12,second=13),
#        content1="hello",content2 ="hello  hi  nihao")a1 = News(price1=1000.0078,price2=1000.0078,title='测试数据',is_delete=False,tag1="PYTHON",tag2=TagEnum.python,create_time1=date(2018,12,12),create_time2=datetime(2019,2,20,12,12,30),create_time3=time(hour=11,minute=12,second=13),content1="hello",content2 ="hello  hi  nihao")
session.add(a1)
session.commit()

 代码分析

  1. 导入必要的模块,包括create_engineColumnIntegerString等数据类型,以及与数据库交互的模块。

  2. 定义了连接数据库所需的一些信息,如主机、端口、数据库名称、用户名和密码。

  3. 使用提供的信息构建了数据库连接的URI。

  4. 创建了一个数据库引擎,用于连接数据库。

  5. 创建了一个会话对象,可以用于执行数据库操作。

  6. 定义了一个枚举类TagEnum,其中包含了一些标签。

  7. 定义了一个ORM模型News,包含了各种不同类型的字段,如整数、浮点数、字符串、布尔值、枚举、日期、时间等。

  8. 创建了这个表格(如果之前不存在的话)。

  9. 创建了一个News对象a1,并将其添加到会话中。

  10. 提交了会话,将数据插入到数据库中。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构】选择排序 堆排序(二)

目录 一,选择排序 1,基本思想 2, 基本思路 3,思路实现 二,堆排序 1,直接选择排序的特性总结: 2,思路实现 3,源代码 最后祝大家国庆快乐! 一&#xf…

数组和切⽚ - Go语言从入门到实战

数组和切⽚ - Go语言从入门到实战 数组的声明 package main import "fmt" func main() { var a [3]int //声明并初始化为默认零值 a[0] 1 fmt.Println("a:", a) // 输出: a: [1 0 0] b : [3]int{1, 2, 3} //声明同时初始化 fmt.Println("b:…

Python3数据科学包系列(二):数据分析实战

Python3中类的高级语法及实战 Python3(基础|高级)语法实战(|多线程|多进程|线程池|进程池技术)|多线程安全问题解决方案 Python3数据科学包系列(一):数据分析实战 Python3数据科学包系列(二):数据分析实战 一:通过read_table函数读取数据创建(DataFrame)数据框 #…

C++指针的使用

文章目录 1.C指针1.1 定义指针1.2 使用指针 2.空指针和野指针2.1 空指针2.2 野指针 3.指针所占空间4.使用const修饰指针4.1 const修饰指针4.2 const修饰常量4.3 const 既修饰指针也修饰常量 5.指针操作数组6.指针做函数参数7.使用指针知识实现冒泡排序 1.C指针 指针其实就是一…

mysql主从同步

原理 概述 将主库的数据变更同步到从库,从而保证主库和从库数据一致 数据备份,失败迁移,读写分离,降低单库读写压力 原理 主数据库设置 docker run --restartalways --name mysql-master -p 3306:3306 -v /home/apps/mysql-…

偏微分方程的人工智能

9 偏微分方程的人工智能 在本节中,我们详细介绍了用于解决偏微分方程(Partial Differential Equations,PDEs)的人工智能领域的进展。我们在第9.1节中概述了PDE建模的一般形式,并阐述了在这个背景下使用机器学习方法的…

竞赛 大数据房价预测分析与可视

0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 大数据房价预测分析与可视 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分工作量:3分创新点:4分 该项目较为新颖,适合…

JavaScript中如何确定this的值?如何指定this的值?

🎀JavaScript中的this 在绝大多数情况下,函数的调用方法决定了this的值(运行时绑定)。this不能在执行期间被赋值,并且在每次函数呗调用时this的值也可能会不同。 🍿如何确定this的值: 在非严格…

百度交易中台之内容分润结算系统架构浅析

作者 | 交易中台团队 导读 随着公司内容生态的蓬勃发展,内容产出方和流量提供方最关注的“收益结算”的工作,也就成为重中之重。本文基于内容分润结算业务为入口,介绍了实现过程中的重难点,比如千万级和百万级数据量下的技术选型和…

C++八股

1、简述一下C中的多态 在面向对象中,多态是指通过基类的指针或引用,在运行时动态调用实际绑定对象函数的行为,与之相对应的编译时绑定函数称为静态绑定。 静态多态 静态多态是编译器在编译期间完成的,编译器会根据实参类型来选择…

UART相关参数和Modbus协议

温湿度数据和风速风向数据的读取和计算方法 文章目录 温湿度数据和风速风向数据的读取和计算方法1 串行通信数据格式1.1 协议介绍1.2 UART相关参数1.3 UART通信过程 2 USB转串口模块的使用3 串口调试助手的使用3.1 串口控制区3.2 发送控制区3.3 接收控制区 4 GY-39气象信息模块…

在2023年使用Unity2021从Built-in升级到Urp可行么

因为最近在做WEbgl平台,所以某些不可抗力原因,需要使用Unity2021开发,又由于不可明说原因,想用Urp,怎么办? 目录 创建RenderAsset 关联Asset 暴力转换(Menu->Edit) 单个文件…

Object.defineProperty()方法详解,了解vue2的数据代理

假期第一篇,对于基础的知识点,我感觉自己还是很薄弱的。 趁着假期,再去复习一遍 Object.defineProperty(),对于这个方法,更多的还是停留在面试的时候,面试官问你vue2和vue3区别的时候,不免要提一提这个方法…

SLAM从入门到精通(tf的使用)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 在ros的机器人学习过程中,有一件事情是肯定少不了的。那就是坐标系的转换。其实这也很容易理解。假设有一个机器人,它有一个…

Linux文件查找,别名,用户组综合练习

1.文件查看: 查看/etc/passwd文件的第5行 [rootserver ~]# head -5 /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologi…

性能压力测试的定义及步骤是什么

在今天的数字化时代,软件系统的性能和稳定性对于企业的成功至关重要。为了确保软件在高负载和压力情况下的正常运行,性能压力测试成为了不可或缺的环节。本文将介绍性能压力测试的定义、步骤。 一、性能压力测试的定义和目标 性能压力测试是通过模拟实际…

openGauss学习笔记-86 openGauss 数据库管理-内存优化表MOT管理-内存表特性-MOT部署配置

文章目录 openGauss学习笔记-86 openGauss 数据库管理-内存优化表MOT管理-内存表特性-MOT部署配置86.1 总体原则86.2 重做日志(MOT)86.3 检查点(MOT)86.4 恢复(MOT)86.5 统计(MOT)86…

USART串口协议

通信接口 •通信的目的:将一个设备的数据传送到另一个设备,扩展硬件系统 • 通信协议:制定通信的规则,通信双方按照协议规则进行数据收发 全双工:指通信双方能够同时进行双向通信,一般来说,全双…

阿里云ACP知识点(三)

1、弹性伸缩不仅提供了在业务需求高峰或低谷时自动调节ECS实例数量的能力,而且提供了ECS实例上自动部署应用的能力。弹性伸缩的伸缩配置支持多种特性,例如______,帮助您高效、灵活地自定义ECS实例配置,满足业务需求。 标签、密钥对、 实例RAM…

[docker]笔记-网络故障处理

1、同事在虚拟机上部署docker,发现电脑无法登录虚拟机了。首先ping测是通的,从我电脑继续进行登录测试发现没问题,初步判断是她电脑网络和虚拟机网络之间连接出错。 2、进行虚拟机登录查看,首先使用route -n命令查看路由&#xf…