SQLAlchemy在Flask中的应用
source link: https://allenwind.github.io/blog/4677/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
记录SQLAlchemy在Flask中的应用
install
上文写到使用ORM进行快速开发,本文简述ORM在Flask
开发中的应用。sqlalchemy
可以直接用于Flask
中,但通过Flask-SQLAlchemy
模块,可以很好地把sqlalchemy
模块嵌入到Flask
的上下文中。
关于ORM的基本概念和sqlalchemy
模块参考旧文使用ORM进行快速开发。
本文需要使用到的模块:
pip3 install -U flask
pip3 install -U flask-sqlalchemy
pip3 install -U pymysql
首先我们需要sqlalchemy
在Flask
中初始化。SQLAlchemy
对象会自动从app
实例中获取配置信息,管理数据库连接。
在Config
类中指定SQLAlchemy
的配置信息。SQLALCHEMY_DATABASE_URI
指定数据库的URL路径,上面说过。SQLALCHEMY_ECHO
是布尔类型,表明是否把和数据库交互的信息打印出来。
from flask_sqlalchemy import SQLAlchemy
from flask import Flask
class Config:
SQLALCHEMY_ECHO = True
SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:root@localhost:3306/flask"
app = Flask(__name__)
app.config.from_object(Config)
db = SQLAlchemy(app)
db对象包括了定义数据库模型时字段的类型信息,常见的类型如下。
- db.Integer
- db.String
- db.Float
- db.Text
- db.Boolean
- db.Date
- db.DateTime
其中前三个类可以接收一个参数,表示存储长度的大小。Integer默认的长度为11。
创建第一个模型,新的模型继承自db.Model
。db.Model
常用的参数有两个,第一个参数指定字段的名字,第二个参数指定字段在数据库中的类型信息。通常第一个字段如果省略,SQLAlchemy
会自动把当前类的属性名当做数据库的字段名字。
class User(db.Model):
__tablename__ = 'user'
id = db.Column(db.Integer(), primary_key=True)
username = db.Column(db.String(255))
password = db.Column(db.String(255))
def __init__(self, username):
self.username = username
def __repr__(self):
return "<User {}>".format(self.username)
由于上面的User
模型中Column
都指定字段名,因此SQLAlchemy
就把id
、username
、password
分别作为数据库的字段名字。
通过db.create_all()
创建我们定义的模型到数据库中。在交互模式下(例如白跑一趟hon)运行上面的代码,然后输入如下代码。
>>> db.drop_all() # 删除数据库中的表
>>> db.create_all()
实际上,上述模型对应的SQL
代码如下
CREATE TABLE `user` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`username` VARCHAR(255) NULL DEFAULT NULL,
`password` VARCHAR(255) NULL DEFAULT NULL,
PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
;
我们可以对比这段SQL
代码和上面定义的User
类,感受它们之间的映射关系。
基于sqlalchemy
模块的CRUD在使用ORM进行快速开发一文已经提到。这部分讲讲添加、读取、修改、删除在Flask
中的运用。这四类数据库操作都是建立在会话(session)上,它由SQLAlchemy
对象维护着。接下来的代码实例假定在交互式(如IDLE、bpython3)上完成。
添加一个数据对象
>>> user = User(username='allen', password='******')
>>> db.session.add(user)
>>> db.session.commit()
添加多个数据对象
>>> users = [user(username=name) for name in ('allen', 'allenwind')]
>>> db.session.add_all(users)
>>> db.commit()
转载请包括本文地址:https://allenwind.github.io/blog/4677
更多文章请参考:https://allenwind.github.io/blog/archives/
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK