首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django + Influxdb

Django + Influxdb
EN

Stack Overflow用户
提问于 2018-05-06 10:37:59
回答 1查看 9K关注 0票数 9

我有存储在进水数据库中的tseries数据,我希望通过web提供这些数据,因此我正在考虑Django框架及其REST框架作为解决方案。

目前,Django框架上有不知道对Influxdb的支持,但是我看到有人在讨论线程这里中暗示成功地创建了这个堆栈。

如果对如何实现这一点有任何明确的评论或想法,特别是如何将influxdb集成到Django框架中,将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-30 17:09:14

您可以在Docker中同时使用Django和InfluxDB。首先,创建一个项目和应用程序。

代码语言:javascript
复制
mkdir django-influxdb-example
cd django-influxdb-example
django-admin startproject project
cd project
django-admin startapp app
cd ..

创建一个虚拟环境并安装django、postgres和进水b

代码语言:javascript
复制
python3 -m venv venv
source venv/bin/activate
pip install django psycopg2 influxdb
pip install --upgrade pip
pip freeze > requirements.txt

现在,我的要求看起来,

代码语言:javascript
复制
certifi==2018.8.24
chardet==3.0.4
Django==2.1.1
idna==2.7
influxdb==5.2.0
psycopg2==2.7.5
python-dateutil==2.7.3
pytz==2018.5
requests==2.19.1
six==1.11.0
urllib3==1.23

创建一个Dockerfile

代码语言:javascript
复制
FROM python:3.6-alpine3.7

ENV PYTHONUNBUFFERED 1

RUN apk update \
    && apk add libpq postgresql-dev \
    && apk add build-base

WORKDIR /usr/src/app

COPY requirements.txt ./
RUN pip install -r requirements.txt

COPY project ./

创建一个docker-compose.yml文件,

代码语言:javascript
复制
version: '3'

services:

  db:
    image: postgres

  web:
    build: .
    command: python3 manage.py runserver 0.0.0.0:8000
    volumes:
      - ./project:/usr/web/app
    ports:
      - "8000:8000"
    depends_on:
      - db
      - influxdb
    links:
      - influxdb

  influxdb:
    image: influxdb
    ports:
      - "8083:8083"
      - "8086:8086"

我在我的Django settings.py中添加了以下内容

代码语言:javascript
复制
INFLUXDB_HOST = 'influxdb'
INFLUXDB_PORT = 8086
INFLUXDB_USERNAME = None
INFLUXDB_PASSWORD = None
INFLUXDB_DATABASE = 'example'
INFLUXDB_TIMEOUT = 10

在这一点上,你可以试着建造整件事,看看它是否会出现,

代码语言:javascript
复制
docker-compose build
docker-compose run web python3 manage.py makemigrations
docker-compose run web python3 manage.py migrate
docker-compose up

如果您转到localhost:8000,那么您应该会看到默认的Django启动页面。如果在web容器上打开交互式Python会话,则应该能够通过Python模块访问InfluxDB,

代码语言:javascript
复制
docker-compose run web python3
Starting django-influxdb-example_db_1 ... done
Starting django-influxdb-example_influxdb_1 ... done
Python 3.6.6 (default, Sep 12 2018, 02:19:14)
[GCC 6.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from influxdb import InfluxDBClient
>>> client = InfluxDBClient('influxdb', 8086)
>>> client.get_list_database()
[{'name': '_internal'}]
>>> client.create_database('example')
>>> client.get_list_database()
[{'name': '_internal'}, {'name': 'example'}]

现在所有的东西都是连接和运行的,您可以专注于编写代码来创建数据库,并添加点。我查看了django-进水数据库-指标的代码,发现了下面的代码,我将这些代码放在utils.py目录中的app/目录中。这使用我们前面在settings.py文件中定义的常量创建了一个进水数据库客户端。

代码语言:javascript
复制
from django.conf import settings

from influxdb import InfluxDBClient

import logging
logger = logging.getLogger(__name__)


def get_influxdb_client():
    """Returns an ``InfluxDBClient`` instance."""
    client = InfluxDBClient(
    settings.INFLUXDB_HOST,
    settings.INFLUXDB_PORT,
    settings.INFLUXDB_USERNAME,
    settings.INFLUXDB_PASSWORD,
    settings.INFLUXDB_DATABASE,
    timeout=getattr(settings, 'INFLUXDB_TIMEOUT', 10),
    ssl=getattr(settings, 'INFLUXDB_SSL', False),
    verify_ssl=getattr(settings, 'INFLUXDB_VERIFY_SSL', False),
)
return client

最后,从这里,我可以创建数据库,添加点,并通过客户端执行查询。

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50198741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档