欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

解讀sqlalchemy的常用數(shù)據(jù)類(lèi)型有哪些

 更新時(shí)間:2023年03月02日 10:25:52   作者:現(xiàn)在叫阿湯哥  
這篇文章主要介紹了解讀sqlalchemy的常用數(shù)據(jù)類(lèi)型有哪些,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

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

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

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

首先,打開(kāi)我們py代碼編輯神器(pycharm),因?yàn)橹案蠹抑v了許多關(guān)于數(shù)據(jù)庫(kù)基本配置及連接的文章,在這里我就不在闡述了。

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

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)行上述代碼

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

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

OK,萬(wàn)事俱備。下面我們就逐一來(lái)講類(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類(lèi)型

第二種:String

我們先將age字段注釋掉,然后從sqlalchemy導(dǎo)入String類(lèi)型(使用某種數(shù)據(jù)類(lèi)型前,記得將該數(shù)據(jù)類(lèi)型從sqlalchemy導(dǎo)入,由于篇幅太長(zhǎng),我們下方數(shù)據(jù)類(lèi)型省略該步驟),再新增一個(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類(lèi)型(映射到數(shù)據(jù)庫(kù),對(duì)應(yīng)varchar類(lèi)型)

第三種:Float

什么情況下會(huì)用到Float類(lèi)型?比如存儲(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類(lèi)型

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

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

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

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

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

第五種: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類(lèi)型)

第六種:Enum

什么情況下會(huì)用到枚舉類(lèi)型呢?比如用戶(hù)填寫(xiě)性別時(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ò)誤:

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

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

第七種:Date

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

說(shuō)到日期類(lèi)型,相信大家都熟悉,比如某年某月某日生。嗯、下面咱們就談?wù)勥@個(gè)Date類(lèi)型。

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é)果如下:

第八種: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é)果如下:

第九種: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é)果:

 

第十種:Text

這個(gè)沒(méi)什么好講的啊,當(dāng)字符串長(zhǎng)度比較長(zhǎng)時(shí)就可以使用Text類(lèi)型

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é)果:

第十一種:LongText

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

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

from sqlalchemy.dialects.mysql import LONGTEXT

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

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

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

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python實(shí)現(xiàn)圖片格式轉(zhuǎn)換

    Python實(shí)現(xiàn)圖片格式轉(zhuǎn)換

    經(jīng)常會(huì)遇到圖片格式需要轉(zhuǎn)換的情況,這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)圖片格式轉(zhuǎn)換,文中示例代碼介紹的非常詳細(xì)、實(shí)用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Python Joblib庫(kù)使用方法案例總結(jié)

    Python Joblib庫(kù)使用方法案例總結(jié)

    Python Joblib庫(kù)是一個(gè)用于并行計(jì)算和數(shù)據(jù)預(yù)處理的工具庫(kù)。它可以幫助用戶(hù)快速處理大量數(shù)據(jù),提高計(jì)算效率。其中,最常用的功能是并行計(jì)算,可以使用多個(gè)CPU核心同時(shí)處理任務(wù),大大縮短計(jì)算時(shí)間。此外,Joblib還提供了一些數(shù)據(jù)預(yù)處理的功能,可以幫助用戶(hù)更好地處理數(shù)據(jù)
    2023-06-06
  • Python socket連接中的粘包、精確傳輸問(wèn)題實(shí)例分析

    Python socket連接中的粘包、精確傳輸問(wèn)題實(shí)例分析

    這篇文章主要介紹了Python socket連接中的粘包、精確傳輸問(wèn)題,結(jié)合實(shí)例形式分析了Python socket連接中的粘包、精確傳輸相關(guān)問(wèn)題原因、解決方案與操作注意事項(xiàng),需要的朋友可以參考下
    2020-03-03
  • Python-OpenCV實(shí)戰(zhàn):利用 KNN 算法識(shí)別手寫(xiě)數(shù)字

    Python-OpenCV實(shí)戰(zhàn):利用 KNN 算法識(shí)別手寫(xiě)數(shù)字

    K-最近鄰(KNN)是監(jiān)督學(xué)習(xí)中最簡(jiǎn)單的算法之一,KNN可用于分類(lèi)和回歸問(wèn)題。本文將為大家介紹的是通過(guò)KNN算法實(shí)現(xiàn)識(shí)別手寫(xiě)數(shù)字。文中的示例代碼介紹詳細(xì),需要的朋友可以參考一下
    2021-12-12
  • typing.Dict和Dict的區(qū)別及它們?cè)赑ython中的用途小結(jié)

    typing.Dict和Dict的區(qū)別及它們?cè)赑ython中的用途小結(jié)

    當(dāng)在 Python 函數(shù)中聲明一個(gè) dictionary 作為參數(shù)時(shí),我們一般會(huì)把 key 和 value 的數(shù)據(jù)類(lèi)型聲明為全局變量,而不是局部變量。,這篇文章主要介紹了typing.Dict和Dict的區(qū)別及它們?cè)赑ython中的用途小結(jié),需要的朋友可以參考下
    2023-06-06
  • Python中hash()函數(shù)之哈希值的奧秘詳解

    Python中hash()函數(shù)之哈希值的奧秘詳解

    hash()是Python 中的一個(gè)內(nèi)置函數(shù),用于計(jì)算對(duì)象的哈希值,哈希值是一個(gè)整數(shù),用于唯一標(biāo)識(shí)對(duì)象,下面這篇文章主要給大家介紹了關(guān)于Python中hash()函數(shù)之哈希值奧秘的相關(guān)資料,需要的朋友可以參考下
    2024-06-06
  • 在Python中處理時(shí)間之clock()方法的使用

    在Python中處理時(shí)間之clock()方法的使用

    這篇文章主要介紹了在Python中處理時(shí)間之clock()方法的使用,是Python入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-05-05
  • 人工神經(jīng)網(wǎng)絡(luò)算法知識(shí)點(diǎn)總結(jié)

    人工神經(jīng)網(wǎng)絡(luò)算法知識(shí)點(diǎn)總結(jié)

    在本篇內(nèi)容里小編給大家分享了人工神經(jīng)網(wǎng)絡(luò)算法的相關(guān)知識(shí)點(diǎn)以及原理介紹,需要的朋友們參考下。
    2019-06-06
  • python協(xié)程異步IO中asyncio的使用

    python協(xié)程異步IO中asyncio的使用

    這篇文章主要介紹了python異步編程之a(chǎn)syncio的使用,python中異步IO操作是通過(guò)asyncio來(lái)實(shí)現(xiàn)的,為了更加詳細(xì)說(shuō)明asyncio,我們先從協(xié)程的最基礎(chǔ)開(kāi)始講解
    2023-12-12
  • 解決Python傳遞中文參數(shù)的問(wèn)題

    解決Python傳遞中文參數(shù)的問(wèn)題

    這篇文章主要介紹了解決Python傳遞中文參數(shù)的問(wèn)題的相關(guān)資料,需要的朋友可以參考下
    2015-08-08

最新評(píng)論