使用flask-sqlalchemy操作mysql数据库

一、安装flask-sqlalchemy

pipenv install flask-sqlalchemy

补充下:

下边配置选项中用到数据库驱动,我用的是cymsql,所以需要下载cymysql数据库驱动

pipenv install cymysql

二、配置选项

在配置文件中,为链接mysql数据库做必须的配置

# 数据库连接配置,必须的,格式为(数据库+数据库驱动://数据库用户名:密码@数据库主机地址:端口号/数据库名称)
my_config={
    "MYSQL":"mysql",
    "CYMSQL":"cymysql",
    "ACCOUNT":"root",
    "PASSWORD":123456,
    "ADDRESS":"localhost",
    "PORT":3306,
    "DATABASENAME":"test"
}
SQLALCHEMY_DATABASE_URI = "{MYSQL}+{CYMSQL}://{ACCOUNT}:{PASSWORD}@{ADDRESS}:{PORT}/{DATABASENAME}".format(**my_config)
SQLALCHEMY_TRACK_MODIFICATIONS = True #为True时,flask-sqlalchemy会跟踪对象的修改
选项说明
SQLALCHEMY_DATABASE_URI用于连接的数据库 URI 。例如  mysql+cymysql://root:123@localhost:3306/test
SQLALCHEMY_TRACK_MODIFICATIONS = True为True时,flask-sqlalchemy会跟踪对象的修改
  


三、初始化

from flask import Flask
from flask_sqlalchemy import SQLAlchemy # 引入SQLAlchemy类
app = Flask(__name__)
app.config.from_object('setting.my_config') # 引入数据库连接配置(我的是在setting文件夹下的my_comfig配置文件中)

db = SQLAlchemy(app) #实例化 SQLAlchemy,创建一个数据库实例,为下边模型提供一个基类,以及一些辅助类、辅助函数,可用于定义模型的结构

 

四、创建模型

# db.Model 创建模型
# db.Column  创建模型属性

class Book(db.Model):  # 让Book 继承基类的模型
    id = db.Column(db.Integer,primary_key=True,autoincrement=True) 
    username = db.Column(db.String(20),nullable=False)
    userpassword = db.Column(db.String(20),nullable=False)

# Integer 整数类型
# primary_key 是否为主键
# autoincrement 是否递增
# String 字符串类型
# nullable 是否允许为空

 

常见的一些模型属性类型:

类型名Python类型说明
Integerint普通整数,一般是 32 位
SmallIntegerint取值范围小的整数,一般是 16 位
Big Integerint 或 long不限制精度的整数
Floatfloat浮点数
Numericdecimal.Decimal定点数
Stringstr变长字符串
Textstr变长字符串,对较长或不限长度的字符串做了优化
Unicodeunicode变长 Unicode 字符串
Unicode Textunicode变长 Unicode 字符串,对较长或不限长度的字符串做了优化
Booleanbool布尔值
Datedatetime.date日期
Timedatetime.time时间
DateTimedatetime.datetime日期和时间
Intervaldatetime.timedelta时间间隔
Enumstr一组字符串
PickleType任何 Python 对象自动使用 Pickle 序列化
LargeBinarystr二进制文件

 

常见的SQLAlchemy列(Column)中的选项:

选项名说明
primary_key如果设为 True,这列就是表的主键( 通常我们会把id定义为主键,并且是autoincrement=True递增模式 )
unique如果设为 True,这列不允许出现重复的值
index如果设为 True,为这列创建索引,提升查询效率
nullable如果设为 True,这列允许使用空值;如果设为 False,这列不允许使用空值
default

为这列定义默认值

autoincrement如果设为 True,表示递增模式

 

五、把创建的模型映射到数据库中去

# 把创建的模型映射到执行数据库中去,这样就ok了,此刻,
# 刷新数据库,会看到上边的数据表已经成功映射到mysql数据库中了!!!
db.create_all(app=app) 

 

六、下边是一个完整的是例子

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config.from_object('setting.my_config')

db = SQLAlchemy(app) 

class Book(db.Model):
    id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    username = db.Column(db.String(20),nullable=False)
    userpassword = db.Column(db.String(20),nullable=False)
db.create_all(app=app)
# 配置文件 setting/my_comfig.py

DEBUG=True

my_config={
    "MYSQL":"mysql",
    "CYMSQL":"cymysql",
    "ACCOUNT":"root",
    "PASSWORD":123456,
    "ADDRESS":"localhost",
    "PORT":3306,
    "DATABASENAME":"test"
}

SQLALCHEMY_DATABASE_URI = "{MYSQL}+{CYMSQL}://{ACCOUNT}:{PASSWORD}@{ADDRESS}:{PORT}/{DATABASENAME}".format(**my_config)
SQLALCHEMY_TRACK_MODIFICATIONS = True 

 

我在补充下:

最近最项目,使用flask-sqlalchemy创建数据库表的时候老是创建失败,总结主要两点原因:

1、在Navicat中,连接Mysql数据库时要指定一个连接名,连接成功之后,在名字中右键新建一个数据库,这个数据库的名字要跟配置文件中的名字对应!!!

   

2、配置文件一定要放在  db.create_all(app=app)  之前!!!

 

下边本想继续记录操作数据库的一些方法,但是文章有点长,下一篇文章详细记录下 数据库的增删改查。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值