溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

sqlalchemy的常用數(shù)據(jù)類型怎么使用

發(fā)布時(shí)間:2023-03-02 11:48:40 來(lái)源:億速云 閱讀:133 作者:iii 欄目:開(kāi)發(fā)技術(shù)

本篇內(nèi)容主要講解“sqlalchemy的常用數(shù)據(jù)類型怎么使用”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“sqlalchemy的常用數(shù)據(jù)類型怎么使用”吧!

    sqlalchemy的常用數(shù)據(jù)類型

    數(shù)據(jù)類型python數(shù)據(jù)類型說(shuō)明
    Integerint整形
    Stringstr字符串
    Floatfloat浮點(diǎn)型
    DECIMALdecimal.Decimal定點(diǎn)型
    Booleanbool布爾型
    Datedatetime.date日期
    DateTimedatetime.datetime日期和時(shí)間
    Timedatetime.time時(shí)間
    Enumstr枚舉類型
    Textstr文本類型
    LongTextstr長(zhǎng)文本類型

    既然我們知道sqlalchemy常用數(shù)據(jù)類型有哪些,下面我們就來(lái)看看這些數(shù)據(jù)類型的用法。

    首先,打開(kāi)我們py代碼編輯神器(pycharm)

    而是直接在此基礎(chǔ)上講解sqlalchemy數(shù)據(jù)類型的用法。

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

    在講解前,我們先測(cè)試下模型是否能夠成功映射到數(shù)據(jù)庫(kù)中,運(yùn)行上述代碼

    sqlalchemy的常用數(shù)據(jù)類型怎么使用

    沒(méi)有報(bào)錯(cuò),我們?cè)诖蜷_(kāi)mysql命令行工具,輸入以下命令

    sqlalchemy的常用數(shù)據(jù)類型怎么使用

    嗯,person庫(kù)表已成功映射到數(shù)據(jù)庫(kù)中。

    OK,萬(wàn)事俱備。下面我們就逐一來(lái)講類型的用法。

    第一種:Integer

    我們?cè)赑erson模型中新增一個(gè)age字段

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

    然后向表中插入一條數(shù)據(jù)

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

    運(yùn)行上述代碼,然后輸入下方命令檢查數(shù)據(jù)是否插入到表中以及該字段是否為int類型

    sqlalchemy的常用數(shù)據(jù)類型怎么使用

    第二種:String

    我們先將age字段注釋掉,然后從sqlalchemy導(dǎo)入String類型(使用某種數(shù)據(jù)類型前,記得將該數(shù)據(jù)類型從sqlalchemy導(dǎo)入,由于篇幅太長(zhǎng),我們下方數(shù)據(jù)類型省略該步驟),再新增一個(gè)name字段(括號(hào)中的20表示該字符串最大長(zhǎng)度為20)

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

    插入一條數(shù)據(jù)試試

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

    運(yùn)行上述代碼,然后輸入下方命令檢查數(shù)據(jù)是否插入到表中以及該字段是否為string類型(映射到數(shù)據(jù)庫(kù),對(duì)應(yīng)varchar類型)

    sqlalchemy的常用數(shù)據(jù)類型怎么使用

    第三種:Float

    什么情況下會(huì)用到Float類型?比如存儲(chǔ)體重、價(jià)格等.....

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

    插入測(cè)試數(shù)據(jù)

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

    運(yùn)行上述代碼,然后輸入下方命令檢查數(shù)據(jù)是否插入到表中以及該字段是否為float類型

    sqlalchemy的常用數(shù)據(jù)類型怎么使用

    嗯?。∥颐髅鲗懙氖?23.456789,但是存儲(chǔ)到數(shù)據(jù)庫(kù)中卻變成了123.457,為什么會(huì)這樣呢?

    原因我之前說(shuō)過(guò):float單精度類型,單精度數(shù)據(jù)類型存儲(chǔ)到表中容易被丟失。既然我們知道了原因,哪如何解決呢??方法就是用接下來(lái)要講的定點(diǎn)類型(DECIMAL)。

    第四種:DECIMAL

    DECIMAL可以防止數(shù)據(jù)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有兩個(gè)參數(shù),第一個(gè)參數(shù)用于指定一共多少位數(shù),第二個(gè)參數(shù)用于指定小數(shù)點(diǎn)后最多多少位數(shù)

    例如:DECIMAL(4,2)表示一共存儲(chǔ)4位數(shù)字,小數(shù)點(diǎn)后最多有兩位

    如果傳入不符合規(guī)則數(shù)值時(shí)會(huì)報(bào)如下錯(cuò)誤:

    sqlalchemy的常用數(shù)據(jù)類型怎么使用

    所以我們?cè)诓迦霐?shù)據(jù)時(shí)一定要遵守參數(shù)規(guī)則

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

    運(yùn)行上述代碼,然后輸入下方命令檢查數(shù)據(jù)是否插入到表中以及該字段是否為decimal類型

    sqlalchemy的常用數(shù)據(jù)類型怎么使用

    第五種: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)

    插入數(shù)據(jù)試試。我們知道,1代表true,0代表false

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

    運(yùn)行上述代碼,然后輸入下方命令檢查數(shù)據(jù)是否插入到表中(存儲(chǔ)到數(shù)據(jù)庫(kù)中對(duì)應(yīng)tinyint類型)

    sqlalchemy的常用數(shù)據(jù)類型怎么使用

    第六種:Enum

    什么情況下會(huì)用到枚舉類型呢?比如用戶填寫性別時(shí),固定只能選男或者女,不可能不男不女,對(duì)吧!

    Enum()括號(hào)中為枚舉列表,在這個(gè)里面可以羅列出可輸入的值!

    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("男","女"))

    我們先插入一條錯(cuò)誤數(shù)據(jù)試試

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

    運(yùn)行代碼、結(jié)果報(bào)如下錯(cuò)誤:

    sqlalchemy的常用數(shù)據(jù)類型怎么使用

    我們?cè)佥斎胍粭l正確數(shù)據(jù)試試

    sqlalchemy的常用數(shù)據(jù)類型怎么使用

    嗯,數(shù)據(jù)成功插入到表中,且數(shù)據(jù)類型為enum。

    第七種:Date

    Date只能存儲(chǔ)指定的年月日,不能存儲(chǔ)時(shí)分秒

    說(shuō)到日期類型,相信大家都熟悉,比如某年某月某日生。嗯、下面咱們就談?wù)勥@個(gè)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導(dǎo)入datetime這個(gè)包,將數(shù)據(jù)添加至數(shù)據(jù)庫(kù)

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

    datetime()中的數(shù)值用于傳遞指定的年月日

    運(yùn)行并查看數(shù)據(jù)結(jié)果如下:

    sqlalchemy的常用數(shù)據(jù)類型怎么使用

    第八種:DateTime

    DateTime存儲(chǔ)指定的年月日時(shí)分秒

    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)

    添加測(cè)試數(shù)據(jù)

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

    datetime()括號(hào)中傳遞指定的年月日時(shí)分秒

    運(yùn)行并查看數(shù)據(jù)結(jié)果如下:

    sqlalchemy的常用數(shù)據(jù)類型怎么使用

    第九種:Time

    Time只能存儲(chǔ)時(shí)分秒,不能存儲(chǔ)年月日

    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)

    插入測(cè)試數(shù)據(jù),time()后面?zhèn)鬟f關(guān)鍵字參數(shù),用于指定時(shí)分秒

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

    運(yùn)行并查看結(jié)果:

     sqlalchemy的常用數(shù)據(jù)類型怎么使用

    第十種:Text

    這個(gè)沒(méi)什么好講的啊,當(dāng)字符串長(zhǎng)度比較長(zhǎng)時(shí)就可以使用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)

    插入數(shù)據(jù):

    p = Person(content = "人最需要的是學(xué)習(xí)")
    session.add(p)
    session.commit()

    運(yùn)行并查看結(jié)果:

    sqlalchemy的常用數(shù)據(jù)類型怎么使用

    第十一種:LongText

    由于Text的存儲(chǔ)長(zhǎng)度有限,我們就可以使用LongText來(lái)存儲(chǔ)數(shù)據(jù)。

    由于LongText類型在mysql數(shù)據(jù)庫(kù)才有,其它數(shù)據(jù)庫(kù)沒(méi)有該數(shù)據(jù)類型,在使用前,記得從mysql數(shù)據(jù)庫(kù)導(dǎo)入該數(shù)據(jù)類型

    from sqlalchemy.dialects.mysql import LONGTEXT

    插入數(shù)據(jù):

    p = Person(content = "我要給它做廣告,讓它在人群中最閃耀!")
    session.add(p)
    session.commit()

    運(yùn)行上述代碼并查看結(jié)果:

    sqlalchemy的常用數(shù)據(jù)類型怎么使用

    到此,相信大家對(duì)“sqlalchemy的常用數(shù)據(jù)類型怎么使用”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

    向AI問(wèn)一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI