Django + 涌入数据库

Posted

技术标签:

【中文标题】Django + 涌入数据库【英文标题】:Django + Influxdb 【发布时间】:2018-10-16 08:19:47 【问题描述】:

我有存储在 influxdb 中的 tseries 数据,我想通过 Web API 提供这些数据,因此正在考虑将 Django 框架及其 REST API 框架作为解决方案。

目前,Django 框架上有no known support for Influxdb,但是我看到有人在讨论线程here 中暗示成功创建了这个堆栈。

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

【问题讨论】:

@user2205880 您能否解释一下如何实现 jango/influxdb 连接并让 Django 模型使用您在链接讨论线程中提到的来自 influx 的数据? 你已经有django + influxdb ORM @gao.xiangyang 据我所知 【参考方案1】:

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

mkdir django-influxdb-example
cd django-influxdb-example
django-admin startproject project
cd project
django-admin startapp app
cd ..

创建虚拟环境并安装django、postgres和influxdb。

python3 -m venv venv
source venv/bin/activate
pip install django psycopg2 influxdb
pip install --upgrade pip
pip freeze > requirements.txt

现在,我的要求是这样的,

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

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 文件,

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

INFLUXDB_HOST = 'influxdb'
INFLUXDB_PORT = 8086
INFLUXDB_USERNAME = None
INFLUXDB_PASSWORD = None
INFLUXDB_DATABASE = 'example'
INFLUXDB_TIMEOUT = 10

此时,您可以尝试构建整个东西,看看它是否会出现,

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 模块访问 InfluxDB,

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-influxdb-metrics 的代码并找到了下面的代码,我把它放在我的app/ 目录中的utils.py 文件中。这将使用我们之前在 settings.py 文件中定义的常量创建一个 influxdb 客户端。

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

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

【讨论】:

当 influx 作为独立服务启动时,它可以工作。当我写这个问题时,我正在努力解决如何替换 Django 用于其模型的底层数据库,如果我知道容器化的概念,这可能是一个不必要的方向。这个解决方案现在很有意义。 我看到这会重置每个请求的连接,你知道如何使用持久连接吗?这超出了范围,但我不确定它是否值得单独提出一个问题。

以上是关于Django + 涌入数据库的主要内容,如果未能解决你的问题,请参考以下文章

时间错配涌入 / Grafana

预警!大数据分析,一大批人已涌入诸暨,这些地方要特别注意……

科技云报道:大小巨头涌入赛道,隐私计算迎来商业落地元年

python高并发怎么解决

科技云报道:资本涌入的计算机视觉,却逃不开商业化“摆烂”?

黎曼到涌入时间戳