使用Flask-SQLAlchemy和PostgreSQL来创建Web服务
使用Flask-SQLAlchemy和PostgreSQL来创建网络服务。
首先
我們將使用樣本應用程式(反饋)來進行介紹。
這是一篇關於Mac環境的文章,不過Windows環境的步驟也是相同的。請根據您的環境替換相關部分並試試看。
Purpose
只需阅读本文到最后,您就能够做到以下的事情:
执行环境
源代码
我认为,通过跟踪实际的实施内容和源代码一起阅读,可以加深理解。请务必充分利用。
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的开发
安装软件包
-
- 以下是一个选项:
在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的配置
-
- 设定开发环境的配置。
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
-
- 生成一个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的一个示例运行。
确认服务
-
- 查询服务。
procedure.sh
~$ brew services list
result.sh
名称 状态 用户 Plist
postgresql 已启动 nsuhara /Users/nsuhara/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
服务开始/结束
-
- 启动服务。
procedure.sh
~$ brew services start postgresql
停止服务。
procedure.sh
~$ brew services stop postgresql
查询数据库
-
- 确认数据库。
默认情况下,会创建三个数据库。此外,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
连接/断开数据库
-
- 连接到数据库。
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
创建用户角色
-
- 连接到数据库。
确认角色(用户)。
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”;
创建数据库
-
- 连接到数据库。
-
- 确认数据库。
-
- procedure.sh
-
- 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”;
数据库迁移
-
- 在Python中设置Flask的环境变量。
-
- 执行数据库迁移。
-
- 在procedure.sh文件中执行以下命令:
-
- ~$ flask db init
-
- ~$ flask db migrate
- ~$ flask db upgrade
删除记录
-
- 连接到数据库。
删除记录。
procedure.sh
postgresql=# 从中删除;
初始化自动编号。
procedure.sh
postgresql=# 选择setval(‘_id_seq’, 1, false);