SQLAlchemy常用数据类型
Integer
:整形,映射到数据库中是int
类型。
Float
:浮点类型,映射到数据库中是float
类型。它占据的32位。
Double
:双精度浮点类型,映射到数据库中是double
类型,占据64位 (SQLALCHEMY
中没有)。
String
:可变字符类型,映射到数据库中是varchar
类型.
Boolean
:布尔类型,映射到数据库中的是tinyint
类型。
DECIMAL
:定点类型。是专门为了解决浮点类型精度丢失的问题的。在存储钱相关的字段的时候建议大家都使用这个数据类型。并且这个类型使用的时候需要传递两个参数
,第一个参数是用来标记这个字段总能能存储多少个数字,第二个参数表示小数点后有多少位。
Enum
:枚举类型。指定某个字段只能是枚举中指定的几个值,不能为其他值。在ORM模型中,使用Enum来作为枚举。
class News(Base):
__tablename__ = 'news'
tag = Column(Enum("python",'flask','django'))
Date
:存储时间,只能存储年月日。映射到数据库中是date
类型。在Python
代码中,可以使用datetime.date
来指定。
DateTime
:存储时间,可以存储年月日时分秒毫秒等。映射到数据库中也是datetime
类型。在Python
代码中,可以使用datetime.datetime
来指定。
Time
:存储时间,可以存储时分秒。映射到数据库中也是time
类型。在Python
代码中,可以使用datetime.time
来指定。
class News(Base):
__tablename__ = 'news'
create_time = Column(Time)
news = News(create_time=time(hour=11,minute=11,second=11))
Text
:存储长字符串。一般可以存储6W
多个字符。如果超出了这个范围,可以使用LONGTEXT
类型。映射到数据库中就是text
类型。
LONGTEXT
:长文本类型,映射到数据库中是longtext
类型(需要从sqlalchemy.dialects.mysql
中导入)。
from sqlalchemy import create_engine,Column,Integer,String,
from sqlalchemy import Float,Enum,Boolean,DECIMAL,Text,Date,DateTime,Time
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.dialects.mysql import LONGTEXT
from sqlalchemy.orm import sessionmaker
import enum
from datetime import date
from datetime import datetime
from datetime import time
HOSTNAME = '127.0.0.1'
PORT = '3306'
DATABASE = 'first_sqlalchemy'
USERNAME = 'root'
PASSWORD = 'root'
DB_URI ="mysql+pymysql://{username}:{password}@{host}:{port}/{db}?charset=utf8".\
format(username=USERNAME,password=PASSWORD,host=HOSTNAME,port=PORT,db=DATABASE)
engine = create_engine(DB_URI)
session = sessionmaker(engine)()
Base = declarative_base(engine)
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'))
create_time1=Column(Date)
create_time2=Column(DateTime)
create_time3=Column(Time)
content1 =Column(Text)
content2 =Column(LONGTEXT)
Base.metadata.drop_all()
Base.metadata.create_all()
a1 = News(price1=1000.00018,
price2=1000.00018,
title='测试数据',
is_delete=True,
tag1="PYTHON",
tag2=TagEnum.flask,
create_time1=date(2020,1,21),
create_time2=datetime(2020,1,21,22,00,07),
create_time3=time(hour=11,minute=12,second=13),
content1="hello",
content2 ="hello hi nihao")
session.add(a1)
session.commit()