sqlalchemy 常用数据类型有哪些?

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/aimill/article/details/81531499

 

                                                   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()

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

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

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

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

第一种:Integer

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

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

然后向表中插入一条数据

扫描二维码关注公众号,回复: 3014067 查看本文章
p = Person(age = 22)
session.add(p)
session.commit()

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

第二种: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类型)

第三种: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类型

嗯!!我明明写的是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位数字,小数点后最多有两位

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

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

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

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

第五种: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类型)

第六种: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()
运行代码、结果报如下错误:

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

嗯,数据成功插入到表中,且数据类型为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()中的数值用于传递指定的年月日

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

第八种: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()括号中传递指定的年月日时分秒

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

第九种: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()

运行并查看结果:

 

第十中: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()

运行并查看结果:

第十一种:LongText

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

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

from sqlalchemy.dialects.mysql import LONGTEXT

插入数据:

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

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

文章篇幅有点长,由于时间关系,写的有点不太详细。文章若有不当之处,望大家指出!

猜你喜欢

转载自blog.csdn.net/aimill/article/details/81531499
今日推荐