原文:https://zhuanlan.zhihu.com/p/71134861
ps = session.query(Person).first() print(ps) # 3、修改制定行數據 person = session.query(Person).first() print(person) # 修改表數據,對象.屬性 = ' ' person.name = 'hahaha' # 別忘記要提交哦~ session.commit() # 4、刪除表數據 person = session.query(Person).get(3) print(person) session.delete(person) session.commit()
Column常用數據類型
常用的數據類型,一共是有11個。
注:在SQLAlchemy中不存在double數據類型,使用DECIMAL類型替代
讓我們來分別看下這11個數據類型都有哪些?
- Integer:整型,映射到數據庫中是int類型。
- Float:浮點類型,映射到數據庫中是float類型。他占據的32位。
浮點類型,有可能會造成精度丟失,特別是在money方面,不可原諒。 - Double(SQLAlchemy中沒有,代替品為DECIMAL):雙精度浮點類型,映射到數據庫中是double類型,占據64位
- String:可變字符類型,映射到數據庫中是varchar類型.
- Boolean:布爾類型,映射到數據庫中的是tinyint類型。
- DECIMAL:定點類型。是專門為了解決浮點類型精度丟失的問題的。在存儲money相關的字段的時候建議大家都使用這個數據類型。並且這個類型使用的時候需要傳遞兩個參數,第一個參數是用來標記這個字段總能能存儲多少個數字,第二個參數表示小數點后有多少位。
- Enum:枚舉類型。指定某個字段只能是枚舉中指定的幾個值,不能為其他值。在ORM模型中,使用Enum來作為枚舉。
- Date:存儲時間,只能存儲年月日。映射到數據庫中是date類型。在Python代碼中,可以使用
datetime.date
來指定。 - DateTime:存儲時間,可以存儲年月日時分秒毫秒等。映射到數據庫中也是datetime類型。在Python代碼中,可以使用
datetime.datetime
來指定。 - Time:存儲時間,可以存儲時分秒。映射到數據庫中也是time類型。在Python代碼中,可以使用
datetime.time
來指定
ps:注意區分Date/DateTime/Time的儲存信息!!! - Text:存儲長字符串。一般可以存儲6W多個字符
- LONGTEXT:長文本類型,映射到數據庫中是longtext類型(不過這個只有mysql有,orcale沒有)
上述就是11個數據類型,因為這里把不存在的double也添加上了,所以看起來是12個。
下面就讓咱們一起來進行驗證。
代碼實現
# 依次導入常用的數據類型 from sqlalchemy import create_engine, Column, Integer, String,Float,DECIMAL,Boolean,Date,DateTime,Time,Text,Enum # 從sqlalchemy的方言模塊dialects導入mysql專有的LONGTEXT,長文本類型 from sqlalchemy.dialects.mysql import LONGTEXT # 在python3.x中有enum模塊 import enum #導入時間了 from datetime import datetime,date,time # 用`declarative_base`根據`engine`創建一個ORM基類。 from sqlalchemy.ext.declarative import declarative_base # 引入創建py和數據庫連接的sessionmaker函數 from sqlalchemy.orm import sessionmaker # 准備連接數據庫基本信息 HOSTNAME = '127.0.0.1' PORT = '3306' DATABASE = 'first_sqlalchemy' USERNAME = 'root' PASSWORD = 'root' DB_URI = 'mysql+pymysql://{username}:{pwd}@{host}:{port}/{db}?charset=utf8' \ .format(username=USERNAME, pwd=PASSWORD, host=HOSTNAME, port=PORT, db=DATABASE) # 創建數據庫引擎 engine = create_engine(DB_URI) Base = declarative_base(engine) # 需求:常用的數據類型 # 枚舉另外一種寫法,導入enum模塊,定義枚舉類 class TagEnum(enum.Enum): python = "PYTHON" flask = 'FLASK' django = 'DJANGO' class News(Base): __tablename__ = 'news' id = Column(Integer,primary_key=True,autoincrement=True) price1 = Column(Float) # 不過存儲數據時存在精度丟失的問題 price2 = Column(DECIMAL(10,4)) title = Column(String(50)) is_delete = Column(Boolean) tag1 = Column(Enum('PYTHON','FLASK','DJANGO')) # 枚舉的常規寫法(推薦) tag2 = Column(Enum(TagEnum)) # 另一種寫法 create_time1 = Column(Date) create_time2 = Column(DateTime) create_time3 = Column(Time) content1 = Column(Text)