使用Flask-SQLAlchemy和PostgreSQL来创建Web服务

使用Flask-SQLAlchemy和PostgreSQL来创建网络服务。

首先

我們將使用樣本應用程式(反饋)來進行介紹。

這是一篇關於Mac環境的文章,不過Windows環境的步驟也是相同的。請根據您的環境替換相關部分並試試看。

Purpose

只需阅读本文到最后,您就能够做到以下的事情:

No.概要キーワード1Flask-SQLAlchemyの開発Flask-SQLAlchemy, psycopg22PostgreSQLの設定psql, Flask-Migrate

执行环境

環境Ver.macOS Catalina10.15.2Python3.7.3Flask-Migrate2.5.2Flask-SQLAlchemy2.4.1Flask1.1.1psycopg22.8.4requests2.22.0

源代码

我认为,通过跟踪实际的实施内容和源代码一起阅读,可以加深理解。请务必充分利用。

GitHub (Github)

相关文章

    FlaskでRESTful Webサービスを作成する

0. 开发环境的配置

/
├── app
│   ├── __init__.py
│   ├── config.py
│   ├── feedback
│   │   ├── __init__.py
│   │   ├── common/
│   │   ├── models
│   │   │   ├── __init__.py
│   │   │   └── feedback.py
│   │   ├── static/
│   │   ├── templates/
│   │   └── views/
│   ├── run.py
│   └── tests/
└── instance
     ├── postgresql.py
     ├── sqlite3.py
     └── config.py

1. Flask-SQLAlchemy的开发

安装软件包

    1. 以下是一个选项:

在procedure.sh文件中,执行以下命令来安装包:
~$ pip install Flask-Migrate
~$ pip install Flask-SQLAlchemy
~$ pip install Flask
~$ pip install psycopg2

如果在安装psycopg2时出现错误,请在macOS + venv环境中指定环境变量并执行以下命令:
~$ xcode-select –install
~$ env LDFLAGS=”-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib” pip install psycopg2

SQLAlchemy的配置

    1. 设定开发环境的配置。

config.py
“””instance/config.py
“””

从instance.postgresql导入SQLALCHEMY_DATABASE_URI作为DATABASE_URI

DEBUG = True
# SECRET_KEY是通过os.urandom(24)生成的。
SECRET_KEY = ‘\xf7\xf4\x9bb\xd7\xa8\xdb\xee\x9f\xe3\x98SR\xda\xb0@\xb7\x12\xa4uB\xda\xa3\x1b’
STRIPE_API_KEY = ”

SQLALCHEMY_DATABASE_URI = DATABASE_URI
SQLALCHEMY_TRACK_MODIFICATIONS = True
SQLALCHEMY_ECHO = True

设定PostgreSQL。

postgresql.py
“””instance/postgresql.py
“””

SQLALCHEMY_DATABASE_URI = ‘postgresql+psycopg2://{user}:{password}@{host}/{name}’.format(**{
‘user’: ‘nsuhara’,
‘password’: ‘nsuhara’,
‘host’: ‘127.0.0.1’,
‘name’: ‘db.postgresql’
})

设定SQLite3(额外)。

sqlite3.py
“””instance/sqlite3.py
“””

导入os

SQLALCHEMY_DATABASE_URI = ‘sqlite:///{host}/{name}’.format(**{
‘host’: os.path.dirname(os.path.abspath(__file__)),
‘name’: ‘db.sqlite3’
})

创建Model

    1. 生成一个SQLAlchemy的实例。

__init__.py
“””app/feedback/models/__init__.py”””

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

def init():
“””init”””
db.create_all()

继承SQLAlchemy的类(db.Model),创建一个模型。

feedback.py
“””app/feedback/models/feedback.py”””

from datetime import datetime

from feedback.models import db

class Feedback(db.Model):
“””Feedback”””
__tablename__ = ‘feedback’

id = db.Column(db.Integer, primary_key=True, autoincrement=True)
service = db.Column(db.String(255), nullable=False)
title = db.Column(db.String(255), nullable=False)
detail = db.Column(db.String(255), nullable=False)
created_date = db.Column(
db.DateTime, nullable=False, default=datetime.utcnow)

def __init__(self, service, title, detail):
self.service = service
self.title = title
self.detail = detail

def to_dict(self):
“””to_dict”””
return {
‘id’: self.id,
‘service’: self.service,
‘title’: self.title,
‘detail’: self.detail,
‘created_date’: self.created_date
}

2. PostgreSQL的配置设置

这是Homebrew的一个示例运行。

确认服务

    1. 查询服务。

procedure.sh
~$ brew services list

result.sh
名称 状态 用户 Plist
postgresql 已启动 nsuhara /Users/nsuhara/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

服务开始/结束

    1. 启动服务。

procedure.sh
~$ brew services start postgresql

停止服务。

procedure.sh
~$ brew services stop postgresql

查询数据库

    1. 确认数据库。

默认情况下,会创建三个数据库。此外,Mac的用户名会被设置为Owner。

procedure.sh
~$ psql -l

result.sh
数据库列表
名称 | 所有者 | 编码 | 区域 | 类型 | 访问权限
————–+———+———-+———+——-+———————
postgres | nsuhara | UTF8 | C | C |
template0 | nsuhara | UTF8 | C | C | =c/nsuhara +
| | | | | nsuhara=CTc/nsuhara
template1 | nsuhara | UTF8 | C | C | =c/nsuhara +
| | | | | nsuhara=CTc/nsuhara

连接/断开数据库

    1. 连接到数据库。

procedure.sh
~$ psql -h “” -p -U “” -d “”

example.sh
~$ psql -h “127.0.0.1” -p 5432 -U “nsuhara” -d “postgres”

断开数据库连接。

procedure.sh
postgresql=# \q

创建用户角色

    1. 连接到数据库。

确认角色(用户)。

procedure.sh
postgresql=# \du

result.sh
角色列表
角色名称 | 属性 | 所属成员
———-+—————————————————–+———–
nsuhara | 超级用户, 创建角色, 创建数据库, 复制, 旁路RLS | {}

创建角色(用户)。

procedure.sh
postgresql=# CREATE ROLE “” LOGIN PASSWORD “password”;

example.sh
postgresql=# CREATE ROLE “nsuhara” LOGIN PASSWORD “nsuhara”;

删除角色(用户)。

procedure.sh
postgresql=# DROP ROLE “”;

example.sh
postgresql=# DROP ROLE “nsuhara”;

创建数据库

    1. 连接到数据库。

 

    1. 确认数据库。

 

    1. procedure.sh

 

    1. postgresql=# \l

result.sh
数据库列表
名称 | 所有者 | 编码 | 校对顺序 | 类型 | 访问权限
————–+———+———-+———+——-+———————
db.postgresql | nsuhara | UTF8 | C | C |
postgres | nsuhara | UTF8 | C | C |
template0 | nsuhara | UTF8 | C | C | =c/nsuhara +
| | | | | nsuhara=CTc/nsuhara
template1 | nsuhara | UTF8 | C | C | =c/nsuhara +
| | | | | nsuhara=CTc/nsuhara

创建数据库。
procedure.sh
postgresql=# CREATE DATABASE “” OWNER “”;

example.sh
postgresql=# CREATE DATABASE “db.postgresql” OWNER “nsuhara”;

删除数据库。
procedure.sh
postgresql=# DROP DATABASE “”;

example.sh
postgresql=# DROP DATABASE “db.postgresql”;

数据库迁移

    1. 在Python中设置Flask的环境变量。

 

    1. 执行数据库迁移。

 

    1. 在procedure.sh文件中执行以下命令:

 

    1. ~$ flask db init

 

    1. ~$ flask db migrate

 

    ~$ flask db upgrade

删除记录

    1. 连接到数据库。

删除记录。

procedure.sh
postgresql=# 从中删除;

初始化自动编号。

procedure.sh
postgresql=# 选择setval(‘_id_seq’, 1, false);

广告
将在 10 秒后关闭
bannerAds