4

SQLAlchemy在Flask中的应用

 2 years ago
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.
neoserver,ios ssh client

记录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

首先我们需要sqlalchemyFlask中初始化。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.Modeldb.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就把idusernamepassword分别作为数据库的字段名字。

通过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/


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK