搭建一个利用docker启动服务的Flask的小demo

定义数据库

# -*- coding: utf-8 -*-from sqlalchemy import *
from sqlalchemy.orm import (scoped_session, sessionmaker, relationship, backref
)
from sqlalchemy.ext.declarative import declarative_base# mysql+mysqlconnector://<user>:<password>@<host>[:<port>]/<dbname>
engine = create_engine("mysql+mysqlconnector://root:@localhost:3306/demo", convert_unicode=True)
session = scoped_session(sessionmaker(autocommit=False, autoflush=False, bind=engine
))Base = declarative_base()
Base.query = session.query_property()class Department(Base):__tablename__ = "department"id = Column(Integer, primary_key=True)name = Column(String(50))class Employee(Base):__tablename__ = "employee"id = Column(Integer, primary_key=True)name = Column(String(50))hired_on = Column(DateTime, default=func.now())department_id = Column(Integer, ForeignKey("department.id"))department = relationship(Department,backref=backref("employee",uselist=True,cascade="delete,all"))

利用SQLAlchemy定义了两个表,其中Department通过relationship可以关联多个Employee,然后通过python console创建表和数据:

>>> from models import *
>>>
>>>
>>> Base.metadata.create_all(bind=engine)
>>>
>>>
>>> engineering = Department(name="Engineering")
>>> session.add(engineering)
>>> hr = Department(name="Human")
>>> session.add(hr)
>>>
>>>
>>> peter = Employee(name="Peter", department=engine)
engine              engine_from_config( engineering
>>> peter = Employee(name="Peter", department=engineering)
>>>
>>> session.add(peter)
>>>
>>>
>>>
>>> roy = Employee(name="Roy", department=engineering)
>>>
>>> session.add(roy)
>>>
>>>
>>> tracy = Employee(name="Tracy", department=hr)
>>>
>>> session.add(tracy)

定义graphql的的Query

# -*- coding: utf-8 -*-from graphene import relay, ObjectType, Schema
from graphene_sqlalchemy import (SQLAlchemyConnectionField, SQLAlchemyObjectType
)from models import (Department as DepartmentModel,Employee as EmployeeModel
)class Department(SQLAlchemyObjectType):class Meta:model = DepartmentModelinterfaces = (relay.Node, )class DepartmentConnections(relay.Connection):class Meta:node = Departmentclass Employee(SQLAlchemyObjectType):class Meta:model = EmployeeModelinterfaces = (relay.Node, )class EmployeeConnections(relay.Connection):class Meta:node = Employeeclass Query(ObjectType):node = relay.Node.Field()all_employees = SQLAlchemyConnectionField(EmployeeConnections)all_departments = SQLAlchemyConnectionField(DepartmentConnections, sort=None)schema = Schema(query=Query)

首先通过继承SQLAlchemyObjectType类来定义新的查询的类,然后通过relay.Connection来连接所定义的查询类,并且在Query中进行申明,其中我在Connection后面加了一个s是因为在github上看issue的时候发现在构造类的过程中会出现重名的情况导致申明Query的时候会报错,所以加一个s用来避免这个错误。
其中有关graphene的部分我自己也还不是特别熟悉,所以只能是大概说一下自己的思路,如果有错误的地方会在后续中及时的进行修改,避免误人子弟。
最终达到的效果是指定来一个schema,其中包含了我所定义的查询。

本地启动

# -*- coding: utf-8 -*-from flask import Flask
from flask_graphql import GraphQLViewfrom models import session
from schema import schemaapp = Flask(__name__)
app.debug = Trueapp.add_url_rule("/graphql",view_func=GraphQLView.as_view("graphql",schema=schema,graphiql=True)
)@app.teardown_appcontext
def shutdown_session(exception=None):session.remove()if __name__ == "__main__":app.run()

通过Flask的add_url_rule将graph的视图定义成通过路由可访问,然后启动就可以进行访问了,点击http://127.0.0.1:5000/graphql就可以本地访问了。

通过docker启动

  • 建立镜像
# run.docker
FROM python:3.6COPY . /appWORKDIR /appRUN pip install -r requirements.txtCMD ["python", "app.py"]

这个是我的Dockerfile,通过Dockerfile,我指定了这个镜像是来自于python:3.6这个镜像,然后把我当前目录下的所有内容通过COPY . /app复制到了docker镜像中的/app目录下,接着我指定了WORKDIR/app,这样我就可以在/app目录下进行操作了,首先是安装所有需要的依赖包,因为我是从python3.6拉的镜像,所以可以不用再去安装pip,直接就可以安装了,如果是其他镜像可能还要同构apt去安装pip再进行依赖包的安装,最后就是用CMD来运行文件了。

docker build -t flask_sqlalchemy:core -f run.docker .
# 其中的.是为了指明上下文路径,其实Dockerfile中的命令并不是对本地文件进行操作,而是通过指定上下文路径将这些文件传到docker搭建镜像的环境中再进行操作。

镜像建立之后就可以run了

docker run -d -p 5000:5000 --name flask-core flask_sqlalchemy:lastest

然后就启动了。


转载于:https://www.cnblogs.com/zzy0306/p/10714087.html

Flask+SQLAlchemy+graphene+docker示例相关推荐

  1. alchemy php,Flask SQLAlchemy

    在Flask Web应用程序中使用原始SQL对数据库执行CRUD操作可能很乏味. 相反,Python工具包SQLAlchemy是一个功能强大的OR映射器,为应用程序开发人员提供了SQL的全部功能和灵活 ...

  2. flask sqlalchemy一对多关系详解

    下面的一对多关系以作者和文章为例: 首先创建一个文章表: class Post(db.Model): id = db.Column(db.Integer(),primary_key=True) tit ...

  3. Flask SQLAlchemy - 2013 Lost Connection

    Flask SQLAlchemy - 2013 Lost Connection 原因 mysql默认的连接超时时间为10s.由于路由字段没有加索引导致有时单条sql执行若超过10s,报了连接超时. 解 ...

  4. Flask – SQLAlchemy成员增加

    目录 简介 结构 展示 技术 运行 代码 创建数据库表单 views视图 home主页 添加成员addnew.html 展示页show_all 简介 结构 $ tree -I "__pyca ...

  5. python学习之flask sqlalchemy介绍和使用 表操作增删查改

    flask sqlalchemy介绍和使用 表操作增删查改 内容详细 1 sqlalchemy介绍和快速使用 1.1 介绍 # SQLAlchemy是一个基于Python实现的ORM框架# djang ...

  6. flask sqlalchemy wtf 使用笔记

    vip用户的model vip用户的model 这边 PlatUserFace 一定要写类名写表名会报错 获取用户信息 这里需要all 才能手动的去获取此用户Face的列表 vip用户的model 关 ...

  7. mysql报错1517_请教一下 flask+sqlalchemy+mysql 连接错误问题

    在本地调试 docker-compose 调试 mysql+nginx+flask 程序,报错(2003, "Can't connect to MySQL server on '127.0. ...

  8. mysql flaskalchemy_python flask sqlalchemy 数据库mysql操作

    第一步app.py: # coding=utf-8 import urllib from flask import Flask from werkzeug.routing import BaseCon ...

  9. flask+sqlalchemy+echarts动态显示数据

    一.创建测试数据 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0;-- ---------------------------- -- Table stru ...

  10. g的python实现_Python flask.g方法代码示例

    本文整理汇总了Python中flask.g方法的典型用法代码示例.如果您正苦于以下问题:Python flask.g方法的具体用法?Python flask.g怎么用?Python flask.g使用 ...

最新文章

  1. PCL common中常见的基础功能函数
  2. c语言 图的存储邻接矩阵,数据结构之---C语言实现图的数组(邻接矩阵)存储表示...
  3. dao层和service层和control_maven分模块构建SSM普通web项目:service层代码编写
  4. Linux 增大Swap
  5. c memcpy 与 strcpy 区别
  6. 正则基础之——\b 单词边界
  7. 8种方法解决vue创建项目报错:command failed: npm install --loglevel error
  8. 过滤器,绑定事件,动画
  9. Realsense的使用
  10. Linux使用命令 笔记
  11. doxygen+graphviz+doxygen-wizard yum install on linux
  12. js 怎样把定时器弄成同步的
  13. GIT 操作中 Reinitialized existing Git repository in.......解决方法?
  14. 基于Python的微信公众号爬虫
  15. 百度、谷歌搜索引擎原理
  16. python csv文件到txt文件转换
  17. 逆滲透水與蒸餾水最不能喝
  18. 全国大学生软件测试大赛Web应用大赛常用测试语句
  19. 大力哥谈 DALI - DALI 调光电源怎么用
  20. 1m照片的宽和高是多少_1m等于多少kb(上传1m照片是多大尺寸)

热门文章

  1. 6种方法轻松将PDF转换为Word文档,办公必备!
  2. 鸿雪因缘--穿越千年的朋友圈
  3. 古诗词干货整理: 春、夏、秋、冬、山、水、日、月、风、花、雨、雪(简直太全了)
  4. python 求复数的模
  5. wamp mysql_wamp中如何打开mysql
  6. 数据分析--数据的分组和聚合
  7. dedecms教程:龙书浩最新DedeCmsV5.7建站仿站VIP视频教程免费下载
  8. iOS从零开始学习socket编程——HTTP1.0服务器端
  9. Java程序员面试时,如何进行自我介绍呢?
  10. html海报源码,8款好用的Html5海报制作工具,让你一分钟做出风靡朋友圈海报