-
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
(
)
SQLAlchemy常用数据类型Integer:整形,映射到数据库中是int类型。Float:浮点类型,映射到数据库中是float类型。它占据的32位。Double:双精度浮点类型,映射到数据库中是double类型,占据64位 (SQLALCHEMY中没有)。String:可变字符类型,映射到数据库中是varchar类型.Boolean:布尔类型,映射到数据库中的是tinyint类型。...
DateTime:传递dateting.datetime()进去
Time:传递datetime.time()进去
String:字符
类型
,使用时需要指定长度,区别于text
类型
Text:文...
conf_thres = Column(DOUBLE())
说明,如果使用Flask-Migrate这种工具修改
数据
库,可能会出现问题。就行国外的大佬遇到的问题一样。至于怎么解决,我就不管了,反正我又不用。
2021-11-12
SQLAlchemy
介绍和基本使用
数据
库是一个网站的基础。Flask可以使用很多种
数据
库。比如MySQL,MongoDB,SQLite,PostgreSQL等。这里我们以MySQL为例进行讲解。而在Flask中,如果想要操作
数据
库,我们可以使用ORM来操作
数据
库,使用ORM操作
数据
库将变得非常简单。
在讲解Flask中的
数据
库操作之前,先确保你已经安装了以下软件:
mysql:如果是在windows上,到官网下载。如果是ubuntu,通过命令sudo apt-get install mysql-serv
这里只介绍
sqlalchemy
.types.* 中的
类型
, SQL
标准
类型
方面, 是写什么最后生成的 DDL 语句就是什么, 比如 BIGINT, BLOG 这些,
但是这些
类型
并不一定在所有
数据
库中都有支持. 除此而外,
SQLAlchemy
也支