Flask框架之SQLAlchemy常用数据类型

SQLAlchemy常用数据类型

  1. Integer:整形,映射到数据库中是int类型。
  2. Float:浮点类型,映射到数据库中是float类型。它占据的32位。
  3. Double:双精度浮点类型,映射到数据库中是double类型,占据64位 (SQLALCHEMY中没有)。
  4. String:可变字符类型,映射到数据库中是varchar类型.
  5. Boolean:布尔类型,映射到数据库中的是tinyint类型。
  6. DECIMAL:定点类型。是专门为了解决浮点类型精度丢失的问题的。在存储钱相关的字段的时候建议大家都使用这个数据类型。并且这个类型使用的时候需要传递两个参数,第一个参数是用来标记这个字段总能能存储多少个数字,第二个参数表示小数点后有多少位。
  7. Enum:枚举类型。指定某个字段只能是枚举中指定的几个值,不能为其他值。在ORM模型中,使用Enum来作为枚举。

class News(Base):
	__tablename__ = 'news'
    tag = Column(Enum("python",'flask','django'))
    
  1. Date:存储时间,只能存储年月日。映射到数据库中是date类型。在Python代码中,可以使用datetime.date来指定。
  2. DateTime:存储时间,可以存储年月日时分秒毫秒等。映射到数据库中也是datetime类型。在Python代码中,可以使用datetime.datetime来指定。
  3. 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))
    
  1. Text:存储长字符串。一般可以存储6W多个字符。如果超出了这个范围,可以使用LONGTEXT类型。映射到数据库中就是text类型。
  2. 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 

#准备数据库的一堆信息 ip port user pwd 数据库的名称 按要求组织格式 
HOSTNAME = '127.0.0.1' 
PORT = '3306' 
DATABASE = 'first_sqlalchemy' 
USERNAME = 'root' 
PASSWORD = 'root' 

#dialect+driver://username:password@host:port/database?charset=utf8 
#按照上述的格式来 组织数据库信息 
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)() 

#创建一个ORM模型
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() 

#新增数据到表news中 
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()

发布了354 篇原创文章 · 获赞 4 · 访问量 7801

猜你喜欢

转载自blog.csdn.net/weixin_44733660/article/details/104066031
今日推荐