SQLAlchemy常用数据类型

news2024/12/23 9:04:45

目录

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 sessionmaker


import 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.coloradmin.cn/o/1039277.html

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

相关文章

体验亚马逊的 CodeWhisperer 感觉

CodeWhisperer 是亚马逊推出的辅助编程工具,在程序员写代码时,它能根据其内容生成多种代码建议。 CodeWhisperer 目前已支持近10几种语言,我是用 java 语言,用的开发工具是 idea,说一下我用的情况。 亚马逊云科技开发…

四川玖璨电子商务有限公司正规吗?

​近年来,随着社交平台的兴起,带货已经成为了一种新型商业模式。抖音作为中国最大的短视频平台之一,也成为了众多商家进行带货销售的重要渠道。而在这个过程中,公司如四川玖璨电子商务有限公司也逐渐涌现出来,为广大用…

什么是 Redis?

Redis 是一种基于内存的数据库,对数据的读写操作都是在内存中完成的,因此读写速度非常快,常用于缓存,消息队列,分布式锁等场景。 Redis 提供了多种数据类型来支持不同的业务场景,比如 String(字符串)、Has…

Spring源码解析—— IOC默认标签解析(下)

正文 在上一篇我们已经完成了从xml配置文件到BeanDefinition的转换,转换后的实例是GenericBeanDefinition的实例。本文主要来看看标签解析剩余部分及BeanDefinition的注册。 默认标签中的自定义标签解析 在上篇博文中我们已经分析了对于默认标签的解析&#xff0…

vue 组件通信

vue 组件通信 mytitile 是变量 title 是形参 回调函数

RocketMQ 线上问题处理

一、发送超时后,重试发送 1.1、问题 生产者发送超时,进行重试发送。 1.2、解决 消费端做幂等处理。

在使用SpringBoot时遇到的异常总结(持续更新...)

文章目录 异常MyBatisjava.sql.SQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint failsMybatis-Plus查询语句无故自动加条件Mybatis No enum constant org.apache.ibatis.type.JdbcType.TEXT 参考文献 因为平时在写Spri…

pandas使用---Series/DataFrame

借鉴 Pandas 常用函数 | 菜鸟教程Pandas 常用函数 以下列出了 Pandas 常用的一些函数及使用实例: 读取数据 函数说明 pd.read_csv(filename)读取 CSV 文件; pd.read_excel(filename)读取 Excel 文件; pd.read_sql(query, connection_object)…

ElasticSearch从入门到精通(二)

ElasticSearch 高级操作 bulk批量操作 批量操作-脚本 #批量操作 #1.删除5号 #新增8号 #更新2号 name为2号 POST _bulk {"delete":{"_index":"person1","_id":"5"}} {"create":{"_index":"person…

jvm深入研究文档--程序执行专业户-虚拟机栈--jvm底层探索(2)

阿丹: JVM的内存分区包括以下几个部分: 堆区(Heap) - 这是JVM的主要部分,用于存储实例对象和大多数Java对象,如数组和用户定义的类。 方法区(Method Area) - 这是线程私有的&#x…

前端项目练习(练习-004-webpack-02)

学习前,首先,创建一个web-004项目,内容和web-003一样。(注意将package.json中的name改为web-004) 前面的例子,成功将js文件打包到了dist中,但是我们有三个文件,css,js和h…

微信公众号开发(BUG集)

1.微信公众平台接口错误:不合法的自定义菜单使用用户 地址:解决地址 2.微信公众平台接口错误:invalid ip 180.101.72.196 ipv6 ::ffff:180.101.72.196, not in whitelist rid: 6511420b-60c59249-01084d02 白名单离开放服务器IP

第六章 Scala if..else与循环

1 IF…ELSE 语句 Scala IF…ELSE 语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块。 1.1 if 语句 if 语句有布尔表达式及之后的语句块组成。 if(布尔表达式) {// 如果布尔表达式为 true 则执行该语句块 }如果布尔表达式为 tru…

BUUCTF SimpleRev

题目:BUUCTF SimpleRev 查壳,没壳,64位 ida打开一通分析 main(): while ( 1 ){while ( 1 ){printf("Welcome to CTF game!\nPlease input d/D to start or input q/Q to quit this program: ");v4 getchar();if ( v4 ! 100 &…

Marvell/Cisco/Broadcom 三巨头的51.2T交换芯片

最近在恶补Freya产品100/200/400/800GE AN/LT端口自适应和链路学习的知识,主要用在基于56Gb/s 的400G,112GGb/s的800G,和1.6Tbps高速接口上,当其使用DAC/AEC/ACC cable时,如果实现端口性能的自动调整。好奇的去拓展了下…

浅谈低压电力电容器常见故障分析及预防措施

安科瑞 华楠 【摘要】为了可以有效实现提高电力电容器故障解决效率,就需要针对其故障诊断技术展开研究,而状态量监测作为提高故障诊断技术效率与质量重要因素,其对电力电容器故障诊断工作而言,有着重要影响意义。基于此&#xff…

多来客推出新版短视频矩阵系统,携手灰豚AI大模型引领行业革新。

9月20日,本地生活行业代表多来客本地生活服务saas系统又上线新版短视频矩阵群控功能,并引入灰豚ai大模型,为商家全面解决了矩阵群控营销的痛点。该系统为本地生活服务商业内首创。 短视频矩阵群控系统 多来客上线于2022年3月份,是国内著名的短视频平台本…

SpringBoot 学习(十)分布式理论

12. 分布式理论 12.1 简介 分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统。 分布式是一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统,其目的是利用更多的机器,处理更多的数据。 …

Vieworks首款采用CoF接口的工业相机亮相!

Vieworks首款CoF(CoaXPress-over-Fiber)接口数字相机,具有高速度、高分辨率。 VC-21MDF-M/C460I在2100万全分辨率下可达到454fps的速率。CoF这个新接口支持传输高达80 Gbps的图像数据,加之配备Vieworks的创新技术,该相机不仅帧速…

钻孔主轴铝铸件微小孔φ2mm钻孔加工方案

随着工业技术的不断发展,铝铸件在现代制造业中发挥着越来越重要的作用。而在铝铸件的制造过程中,微小孔加工一直是一个重要而又具有挑战性的工艺。在这个过程中,钻孔主轴作为一种重要的工具,可以有效地完成铝铸件微小孔的加工。 …