• 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类型.

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

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

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

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

    1. class TagEnum(enum.Enum):
    2. python = "python"
    3. flask = "flask"
    4. django = "django"
    5. class News(Base):
    6. __tablename__ = 't_news'
    7. id = Column(Integer,primary_key=True,autoincrement=True)
    8. tag = Column(Enum(TagEnum))
    9. news = News(tag=TagEnum.flask)

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

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

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

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

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

     代码演示

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

     代码分析

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

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

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

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

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

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

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

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

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

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

  • 相关阅读:
    2021年Java面试题抢先看,够全!(持续更新中)
    Android Jetpack Compose之确定重组范围并优化重组
    【附源码】计算机毕业设计java智慧后勤app设计与实现
    【RocketMQ】【源码】DLedger选主源码分析
    JavaWeb-JVM内存管理机制
    FastDFS模拟场景
    html相关知识点 笔记
    Vue3使用Swiper8.x
    【01】Java代码如何运行
    iNFTnews | 加密之家从宇宙寄来的明信片,你会收到哪一张?
  • 原文地址:https://blog.csdn.net/m0_67093160/article/details/133271082