最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

首先,打開我們py代碼編輯神器(pycharm),因為之前跟大家講了許多關(guān)于數(shù)據(jù)庫基本配置及連接的文章,在這里我就不在闡述了。

而是直接在此基礎(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()

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

沒有報錯,我們在打開mysql命令行工具,輸入以下命令

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

OK,萬事俱備。下面我們就逐一來講類型的用法。

第一種:Integer

我們在Person模型中新增一個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()

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

第二種:String

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

運行上述代碼,然后輸入下方命令檢查數(shù)據(jù)是否插入到表中以及該字段是否為string類型(映射到數(shù)據(jù)庫,對應(yīng)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)

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

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

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

嗯??!我明明寫的是123.456789,但是存儲到數(shù)據(jù)庫中卻變成了123.457,為什么會這樣呢?

原因我之前說過:float單精度類型,單精度數(shù)據(jù)類型存儲到表中容易被丟失。既然我們知道了原因,哪如何解決呢??方法就是用接下來要講的定點類型(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有兩個參數(shù),第一個參數(shù)用于指定一共多少位數(shù),第二個參數(shù)用于指定小數(shù)點后最多多少位數(shù)

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

如果傳入不符合規(guī)則數(shù)值時會報如下錯誤:

所以我們在插入數(shù)據(jù)時一定要遵守參數(shù)規(guī)則

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

運行上述代碼,然后輸入下方命令檢查數(shù)據(jù)是否插入到表中以及該字段是否為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)

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

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

運行上述代碼,然后輸入下方命令檢查數(shù)據(jù)是否插入到表中(存儲到數(shù)據(jù)庫中對應(yīng)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("男","女"))

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

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

運行代碼、結(jié)果報如下錯誤:

我們再輸入一條正確數(shù)據(jù)試試

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

第七種:Date

Date只能存儲指定的年月日,不能存儲時分秒

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

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

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

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

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

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

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

datetime()括號中傳遞指定的年月日時分秒

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

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

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

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

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

 

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

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

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

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

第十一種:LongText

由于Text的存儲長度有限,我們就可以使用LongText來存儲數(shù)據(jù)。

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

from sqlalchemy.dialects.mysql import LONGTEXT

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

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

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

總結(jié)

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

相關(guān)文章

  • keras 獲取某層的輸入/輸出 tensor 尺寸操作

    keras 獲取某層的輸入/輸出 tensor 尺寸操作

    這篇文章主要介紹了keras 獲取某層的輸入/輸出 tensor 尺寸操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • python判斷是否漢字的5種方法實例

    python判斷是否漢字的5種方法實例

    這篇文章主要給大家介紹了關(guān)于python判斷是否漢字的5種方法,文中通過實例代碼將判斷的幾種方法介紹的非常詳細,對大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2023-06-06
  • 一文深入了解Python中的繼承知識點

    一文深入了解Python中的繼承知識點

    Python?是面向?qū)ο蟮木幊陶Z言,因此支持面向?qū)ο蟮娜筇匦灾唬豪^承。本文就帶大家了解了解Python中繼承的相關(guān)知識點,感興趣的可以了解一下
    2022-11-11
  • 5個Python自動化運維腳本分享

    5個Python自動化運維腳本分享

    Python 是一種流行的編程語言,具有豐富的第三方庫和強大的自動化能力,適用于許多不同的領(lǐng)域,許多運維工程師會使用 Python 腳本來自動化運維任務(wù),所以本文為大家整理了5個Python自動化運維腳本,有需要的可以參考下
    2023-08-08
  • 分享5個方便好用的Python自動化腳本

    分享5個方便好用的Python自動化腳本

    這篇文章主要介紹了分享5個方便好用的Python自動化腳本,這次我們使用Python來實現(xiàn)幾個自動化場景,或許可以用到你的工作中或者對你的學(xué)習(xí)有所幫助,需要的朋友可以參考一下
    2022-03-03
  • Python獲取基金網(wǎng)站網(wǎng)頁內(nèi)容、使用BeautifulSoup庫分析html操作示例

    Python獲取基金網(wǎng)站網(wǎng)頁內(nèi)容、使用BeautifulSoup庫分析html操作示例

    這篇文章主要介紹了Python獲取基金網(wǎng)站網(wǎng)頁內(nèi)容、使用BeautifulSoup庫分析html操作,結(jié)合實例形式分析了Python基于urllib包的網(wǎng)頁內(nèi)容獲取,以及使用BeautifulSoup分析html相關(guān)操作技巧,需要的朋友可以參考下
    2019-06-06
  • python?flask項目打包成docker鏡像發(fā)布的過程

    python?flask項目打包成docker鏡像發(fā)布的過程

    這篇文章主要介紹了python?flask項目打包成docker鏡像發(fā)布,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • Python3 replace()函數(shù)使用方法

    Python3 replace()函數(shù)使用方法

    這篇文章主要介紹了Python3 replace()函數(shù)使用方法,需要的朋友可以參考下
    2018-03-03
  • 基于PyTorch實現(xiàn)一個簡單的CNN圖像分類器

    基于PyTorch實現(xiàn)一個簡單的CNN圖像分類器

    本文記錄了一個簡單的基于pytorch的圖像多分類器模型構(gòu)造過程,參考自Pytorch官方文檔、磐創(chuàng)團隊的《PyTorch官方教程中文版》以及余霆嵩的《PyTorch 模型訓(xùn)練實用教程》。從加載數(shù)據(jù)集開始,包括了模型設(shè)計、訓(xùn)練、測試等過程。
    2021-05-05
  • Python使用ntplib庫同步校準當?shù)貢r間的方法

    Python使用ntplib庫同步校準當?shù)貢r間的方法

    NTP網(wǎng)絡(luò)時間協(xié)議其實大家平時或多或少都能接觸到,包括Windows在內(nèi)的操作系統(tǒng)中的很多Internet時間同步功能都是在NTP的基礎(chǔ)上來做,這里我們來看一下Python使用ntplib庫同步校準當?shù)貢r間的方法
    2016-07-07

最新評論

汶川县| 云安县| 姜堰市| 桐梓县| 连南| 彰化县| 休宁县| 浦东新区| 温州市| 嘉祥县| 武义县| 平乡县| 兰溪市| 尚义县| 彝良县| 古蔺县| 上饶市| 京山县| 石景山区| 开阳县| 英山县| 保德县| 方山县| 长沙县| 晋城| 黔江区| 卓尼县| 上思县| 读书| 沂南县| 镇安县| 奎屯市| 都昌县| 锡林郭勒盟| 沙坪坝区| 宁夏| 轮台县| 汽车| 梨树县| 讷河市| 洪湖市|