Vertica 集成 Flask¶
关于本文档¶
本文档的目标是集成 Vertica 与 Flask。我们使用 vertica-python 驱动来连接 Vertica 和 Flask。此集成使您能够向 Vertica 数据库填充数据、更新和删除数据。
Apache Flask 概述¶
Flask 是一个用 Python 开发的微 Web 框架,用于轻松开发 Web 应用程序。Flask 框架可以安装在任何安装了 Python 3 的操作系统上。
测试环境¶
在此探索中,我们使用了以下环境和版本:
- 操作系统:RHEL 8.4
- Python 版本:3.6.8
- pip 最新版本
- Flask 版本:2.0.2
前提条件¶
在将 Flask 连接到 Vertica 之前,需要安装 vertica-python 驱动。为此,在 RHEL 命令行中运行以下命令:
将 Flask 连接到 Vertica¶
- 创建
flask_sqlalchemy_vertica_python目录并添加文件,如下图所示:

- 在
EmployeeData.py文件中,添加以下代码。将SQLALCHEMY_DATABASE_URI更新为 Vertica 数据库的用户名、密码、服务器 IP 和数据库名称。
import os
from flask import Flask
from flask import render_template
from flask import request
from flask import redirect
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config.update(
SECRET_KEY='',
SQLALCHEMY_DATABASE_URI='vertica+vertica_python://dbadmin:<password>@<Vertica_IP_Address>:5433/VMart',
SQLALCHEMY_TRACK_MODIFICATIONS=False
)
db = SQLAlchemy(app)
class Employee(db.Model):
emp_name = db.Column(db.String(80), unique=True, nullable=False, primary_key=True)
def __repr__(self):
return "<Employeename: {}>".format(self.emp_name)
@app.route("/", methods=["GET", "POST"])
def home():
employees = None
if request.form:
try:
employee = Employee(emp_name=request.form.get("emp_name"))
db.session.add(employee)
db.session.commit()
except Exception as e:
print("Failed to show employee name ")
print(e)
employees = Employee.query.all()
return render_template("home.html", employees=employees)
@app.route("/update", methods=["POST"])
def update():
new_name = request.form.get("newname")
employees = Employee.query.filter_by(emp_name=request.form.get("oldname")).first()
if employees:
db.session.delete(employees)
db.session.commit()
employees = Employee(emp_name=new_name)
db.session.add(employees)
db.session.commit()
return redirect("/")
@app.route("/delete", methods=["POST"])
def delete():
emp_name = request.form.get("delname")
employees = Employee.query.filter_by(emp_name=emp_name).first()
db.session.delete(employees)
db.session.commit()
return redirect("/")
if __name__ == "__main__":
db.create_all()
app.run(host='<FlaskServer_IP_Address>')
-
将代码最后一行中的 IP 地址更新为 Flask 安装所在的 IP 地址。
-
在
home.html文件中包含以下脚本:
<html>
<style>
table#addnew{
table-layout: fixed;
width: 50%;
font-family: Arial, Helvetica, sans-serif;
}
table#showdetails,td, th, td {
table-layout: fixed;
width: 50%;
font-family: Arial, Helvetica, sans-serif;
}
h1,h3 {
color: blue;
font-family: Arial, Helvetica, sans-serif;
}
div#f{
border: 3px solid black;
width: 100%;
height: 500px;
}
</style>
<body>
<h1><center>Flask Vertica Integration Demo</center></h1>
<div id="f">
<div id="flask">
<div id="a">
<table id='addnew' align="center">
<tr>
<form method="POST" action="/">
<h3><center>Add New Employee</center></h3>
</tr>
<tr>
<td>Enter Employee Name</td>
<td><input type="text" name="emp_name"></td>
<td><input type="submit" value="Add"></td>
</tr>
</table>
</form>
</div>
<div id="c">
<table id='showdetails' align="center">
<tr><h3><center>Employees Data</center></h3></tr>
<tr align="left">
<th>Old Name</th><th>New Name</th><th> </th>
</tr>
<tr><td>{% for employee in employees %}</td></tr>
<tr>
<td>{{employee.emp_name}}</td>
<form method="POST" action="./update" style="display: inline">
<td>
<input type="hidden" value="{{employee.emp_name}}" name="oldname">
<input type="text" value="{{employee.emp_name}}" name="newname">
</td>
<td align="center">
<input type="submit" value="Update">
</td>
</form>
<td>
<form method="POST" action="./delete" style="display: inline">
<input type="hidden" value="{{employee.emp_name}}" name="delname">
<input type="submit" value="Delete">
</form>
</td>
</tr>
{% endfor %}
</table>
</div>
</div>
</div>
</body>
</html>
-
在
requirements.txt文件中包含以下命令: -
执行以下命令安装 flask 依赖:
-
执行以下命令运行 flask 应用程序。应用程序日志将记录到
flask.log文件中: -
命令成功执行后,显示消息
* Running on http://<FlaskServer_IP_Address>:5000。

- 打开链接
http://<FlaskServer_IP_Address>:5000/。Flask 框架显示home.html网页,其中包含来自 Vertica 服务器的数据。

更多信息¶
| 关于... | 参见... |
|---|---|
| Flask 网站 | https://flask.palletsprojects.com/en/2.0.x/ |
| Vertica Community Edition | https://vertica.com/community/ |
| Vertica 文档 | http://vertica.com/docs/latest/HTML/index.htm |
| Vertica User Community | https://vertica.com/big-data-analytics-community-content/ |
原文来源:https://www.vertica.com/kb/Flask_TE/Content/Partner/Flask_TE.htm