sqlalchemy的常用数据类型怎么使用

作者:有用网 阅读量:182 发布时间:2024-01-04
关键字

本篇内容主要讲解“sqlalchemy的常用数据类型怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“sqlalchemy的常用数据类型怎么使用”吧!

    sqlalchemy的常用数据类型

    数据类型 python数据类型 说明
    Integer int 整形
    String str 字符串
    Float float 浮点型
    DECIMAL decimal.Decimal 定点型
    Boolean bool 布尔型
    Date datetime.date 日期
    DateTime datetime.datetime 日期和时间
    Time datetime.time 时间
    Enum str 枚举类型
    Text str 文本类型
    LongText str 长文本类型

    既然我们知道sqlalchemy常用数据类型有哪些,下面我们就来看看这些数据类型的用法。

    首先,打开我们py代码编辑神器(pycharm)

    而是直接在此基础上讲解sqlalchemy数据类型的用法。

    from sqlalchemy import create_engine,Column,Integer
    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy.orm.session import sessionmaker
    DIALCT = "mysql"
    DRIVER = "pymysql"
    USERNAME = "root"
    PASSWORD = "admin"
    HOST = "127.0.0.1"
    PORT = "3306"
    DATABASE = "test"
    DB_URI = "{}+{}://{}:{}@{}:{}/{}?charset=utf8".format(DIALCT,DRIVER,USERNAME,PASSWORD,HOST,PORT,DATABASE)
    engine = create_engine(DB_URI)
    Base = declarative_base(engine)
    session = sessionmaker(engine)()
     
    class Person(Base):
        __tablename__ = "person"
        id = Column(Integer , primary_key=True , autoincrement=True)
     
     
    Base.metadata.drop_all()
    Base.metadata.create_all()

    在讲解前,我们先测试下模型是否能够成功映射到数据库中,运行上述代码

    sqlalchemy的常用数据类型怎么使用

    没有报错,我们在打开mysql命令行工具,输入以下命令

    sqlalchemy的常用数据类型怎么使用

    嗯,person库表已成功映射到数据库中。

    OK,万事俱备。下面我们就逐一来讲类型的用法。

    第一种:Integer

    我们在Person模型中新增一个age字段

    class Person(Base):
        __tablename__ = "person"
        id = Column(Integer , primary_key=True , autoincrement=True)
        age = Column(Integer)

    然后向表中插入一条数据

    p = Person(age = 22)session.add(p)session.commit()

    运行上述代码,然后输入下方命令检查数据是否插入到表中以及该字段是否为int类型

    sqlalchemy的常用数据类型怎么使用

    第二种:String

    我们先将age字段注释掉,然后从sqlalchemy导入String类型(使用某种数据类型前,记得将该数据类型从sqlalchemy导入,由于篇幅太长,我们下方数据类型省略该步骤),再新增一个name字段(括号中的20表示该字符串最大长度为20)

    class Person(Base):
        __tablename__ = "person"
        id = Column(Integer , primary_key=True , autoincrement=True)
        # age = Column(Integer)
        name = Column(String(20))

    插入一条数据试试

    p = Person(name = "tom")
    session.add(p)
    session.commit()

    运行上述代码,然后输入下方命令检查数据是否插入到表中以及该字段是否为string类型(映射到数据库,对应varchar类型)

    sqlalchemy的常用数据类型怎么使用

    第三种:Float

    什么情况下会用到Float类型?比如存储体重、价格等.....

    class Person(Base):
        __tablename__ = "person"
        id = Column(Integer , primary_key=True , autoincrement=True)
        # age = Column(Integer)
        # name = Column(String(20))
        price = Column(Float)

    插入测试数据

    p = Person(price = 123.456789)
    session.add(p)
    session.commit()

    运行上述代码,然后输入下方命令检查数据是否插入到表中以及该字段是否为float类型

    sqlalchemy的常用数据类型怎么使用

    嗯!!我明明写的是123.456789,但是存储到数据库中却变成了123.457,为什么会这样呢?

    原因我之前说过:float单精度类型,单精度数据类型存储到表中容易被丢失。既然我们知道了原因,哪如何解决呢??方法就是用接下来要讲的定点类型(DECIMAL)。

    第四种:DECIMAL

    DECIMAL可以防止数据jingd

    class Person(Base):
        __tablename__ = "person"
        id = Column(Integer , primary_key=True , autoincrement=True)
        # age = Column(Integer)
        # name = Column(String(20))
        # price = Column(Float)
        price = Column(DECIMAL(7,3))

    DECIMAL有两个参数,第一个参数用于指定一共多少位数,第二个参数用于指定小数点后最多多少位数

    例如:DECIMAL(4,2)表示一共存储4位数字,小数点后最多有两位

    如果传入不符合规则数值时会报如下错误:

    sqlalchemy的常用数据类型怎么使用

    所以我们在插入数据时一定要遵守参数规则

    p = Person(price = 1234.567)
    session.add(p)
    session.commit()

    运行上述代码,然后输入下方命令检查数据是否插入到表中以及该字段是否为decimal类型

    sqlalchemy的常用数据类型怎么使用

    第五种:Boolean

    class Person(Base):
        __tablename__ = "person"
        id = Column(Integer , primary_key=True , autoincrement=True)
        # age = Column(Integer)
        # name = Column(String(20))
        # price = Column(Float)
        # price = Column(DECIMAL(7,3))
        delete = Column(Boolean)

    插入数据试试。我们知道,1代表true,0代表false

    p = Person(delete = 1)
    session.add(p)
    session.commit()

    运行上述代码,然后输入下方命令检查数据是否插入到表中(存储到数据库中对应tinyint类型)

    sqlalchemy的常用数据类型怎么使用

    第六种:Enum

    什么情况下会用到枚举类型呢?比如用户填写性别时,固定只能选男或者女,不可能不男不女,对吧!

    Enum()括号中为枚举列表,在这个里面可以罗列出可输入的值!

    class Person(Base):
        __tablename__ = "person"
        id = Column(Integer , primary_key=True , autoincrement=True)
        # age = Column(Integer)
        # name = Column(String(20))
        # price = Column(Float)
        # price = Column(DECIMAL(7,3))
        # delete = Column(Boolean)
        sex = Column(Enum("男","女"))

    我们先插入一条错误数据试试

    p = Person(sex="不男不女")
    session.add(p)
    session.commit()

    运行代码、结果报如下错误:

    sqlalchemy的常用数据类型怎么使用

    我们再输入一条正确数据试试

    sqlalchemy的常用数据类型怎么使用

    嗯,数据成功插入到表中,且数据类型为enum。

    第七种:Date

    Date只能存储指定的年月日,不能存储时分秒

    说到日期类型,相信大家都熟悉,比如某年某月某日生。嗯、下面咱们就谈谈这个Date类型。

    class Person(Base):
        __tablename__ = "person"
        id = Column(Integer , primary_key=True , autoincrement=True)
        # age = Column(Integer)
        # name = Column(String(20))
        # price = Column(Float)
        # price = Column(DECIMAL(7,3))
        # delete = Column(Boolean)
        # sex = Column(Enum("男","女"))
        create_time = Column(Date)

    然后从datetime导入datetime这个包,将数据添加至数据库

    from datetime import datetime
    p = Person(create_time = datetime(2018,8,8))
    session.add(p)
    session.commit()

    datetime()中的数值用于传递指定的年月日

    运行并查看数据结果如下:

    sqlalchemy的常用数据类型怎么使用

    第八种:DateTime

    DateTime存储指定的年月日时分秒

    class Person(Base):
        __tablename__ = "person"
        id = Column(Integer , primary_key=True , autoincrement=True)
        # age = Column(Integer)
        # name = Column(String(20))
        # price = Column(Float)
        # price = Column(DECIMAL(7,3))
        # delete = Column(Boolean)
        # sex = Column(Enum("男","女"))
        # create_time = Column(Date)
        create_time = Column(DateTime)

    添加测试数据

    p = Person(create_time = datetime(2018,8,8,16,11,50))
    session.add(p)
    session.commit()

    datetime()括号中传递指定的年月日时分秒

    运行并查看数据结果如下:

    sqlalchemy的常用数据类型怎么使用

    第九种:Time

    Time只能存储时分秒,不能存储年月日

    class Person(Base):
        __tablename__ = "person"
        id = Column(Integer , primary_key=True , autoincrement=True)
        # age = Column(Integer)
        # name = Column(String(20))
        # price = Column(Float)
        # price = Column(DECIMAL(7,3))
        # delete = Column(Boolean)
        # sex = Column(Enum("男","女"))
        # create_time = Column(Date)
        # create_time = Column(DateTime)
        create_time = Column(Time)

    插入测试数据,time()后面传递关键字参数,用于指定时分秒

    from datetime import datetime,time
    p = Person(create_time=time(hour=12,minute=20,second=50))
    session.add(p)
    session.commit()

    运行并查看结果:

     sqlalchemy的常用数据类型怎么使用

    第十种:Text

    这个没什么好讲的啊,当字符串长度比较长时就可以使用Text类型

    class Person(Base):
        __tablename__ = "person"
        id = Column(Integer , primary_key=True , autoincrement=True)
        # age = Column(Integer)
        # name = Column(String(20))
        # price = Column(Float)
        # price = Column(DECIMAL(7,3))
        # delete = Column(Boolean)
        # sex = Column(Enum("男","女"))
        # create_time = Column(Date)
        # create_time = Column(DateTime)
        # create_time = Column(Time)
        content = Column(Text)

    插入数据:

    p = Person(content = "人最需要的是学习")
    session.add(p)
    session.commit()

    运行并查看结果:

    sqlalchemy的常用数据类型怎么使用

    第十一种:LongText

    由于Text的存储长度有限,我们就可以使用LongText来存储数据。

    由于LongText类型在mysql数据库才有,其它数据库没有该数据类型,在使用前,记得从mysql数据库导入该数据类型

    from sqlalchemy.dialects.mysql import LONGTEXT

    插入数据:

    p = Person(content = "我要给它做广告,让它在人群中最闪耀!")
    session.add(p)
    session.commit()

    运行上述代码并查看结果:

    sqlalchemy的常用数据类型怎么使用


    #发表评论
    提交评论