Как я могу заставить многих пользователей работать с одним файлом? - PullRequest
0 голосов
/ 06 октября 2019

Возможно ли в python работать над одним файлом от разных пользователей? Позвольте мне быть более ясным: я хотел бы сделать программное обеспечение, которое читает базу данных (я использую панды). Это программное обеспечение будет использоваться одновременно с разных компьютеров, и оно будет читать и записывать одну и ту же базу данных. Так есть ли инструмент, который постоянно проверяет, какие последние голоса были обновлены в базе данных, и обновляет их в оперативной памяти каждого пользователя? Или для этого есть что-то более умное?

Большое спасибо!

Ответы [ 2 ]

1 голос
/ 06 октября 2019

Любой ACID (в данном случае ключевой особенностью является функция «Изоляция»), которая предоставит вам эти функции. Хорошей бесплатной базой данных для этого является PostgreSQL, альтернативой (если у вас есть к ней доступ) является MS-SQL Server.

Вы действительно хотите использовать для этого базу данных, совместимую с ACID, и не сталкивайтесь с этимсебя.

Эта проблема существует уже много десятилетий и была решена. Существует слишком много крайних случаев, которые сделают вашу жизнь по-настоящему тяжелой, если вы захотите работать с простыми файлами на диске.

Кроме того, pandas очень способен читать данные из таких баз данных.

Некоторые основы

Учитывая формулировку вопроса, я позволю себе предположить, что это может быть новая территория для вас, поэтому вот несколько «минимальных» указателей, с которых можно начать. Но некоторые вещи, которые вы будете иметь для чтения:

  • SQL - язык структурированных запросов - используется для извлечения данных из таблицы базы данных. Вы можете использовать это для предварительной обработки и предварительной фильтрации данных, прежде чем превратить их в фрейм данных. Это снижает нагрузку на ваш компьютер и в сети. В зависимости от размера данных это значительно снижает нагрузку .
  • Документация базы данных, которую вы используете: Самое главное, какие типы данных существуют, и инструкции по установке.

Предполагается, что вы начинаете с файла CSV, вот простой пример.

Подготовка базы данных

Сначала необходимо загрузить данные CSV в базу данных. Ради этого примера я буду использовать PostgreSQL. Другие базы данных будут иметь другой синтаксис для загрузки данных.

Я также буду очень либеральным с выбором типа данных, и я не буду использовать «первичный ключ». Но это всего лишь , чтобы сделать его максимально простым. Вы должны прочитать эти темы для своего окончательного решения!

Итак, давайте предположим следующее о БД (см. Приложение ниже о том, как запустить тестовый экземпляр с помощью Docker):

  • Он работает на хосте "192.0.2.1" с использованием порта "5432"
  • Имя базы данных (каждый сервер БД может запускать несколько баз данных) - это "stackoverflow"
  • Имя пользователя "jdoe" с паролем "supersecret"

Кроме того, давайте использовать бесплатный файл данных для воспроизведения. Давайте использовать некоторые данные AirBNB (это было первое, что появилось в kaggle во время написания этой статьи).

Затем мы можем использовать клиент командной строки psql для подключения, создайте таблицу и загрузите файл данных:

Соединение

В командной строке выполните следующую команду:

psql postgres://jdoe:supersecret@192.0.2.1:5432/stackoverflow

. Содержит значения, перечисленные выше. Некоторые из них могут быть опущены (например, пароль или порт по умолчанию), но я оставил их в иллюстративных целях.

Теперь вы можете запустить запрос SQL для создания новой таблицы. Это похоже на фрейм данных и содержит ваши данные для всех ваших пользователей. Этот запрос также определяет имя таблицы, имена столбцов и типы данных:

Создание таблицы и загрузка данных

Очевидно, что таблицу необходимо создать только один раз. Загрузка данных зависит от ваших потребностей. Используя SQL, каждый пользователь может также вставлять, изменять и удалять данные в таблицах.

CREATE TABLE mydata (
    id INTEGER,
    name TEXT,
    host_id INTEGER,
    host_name TEXT,
    neighbourhood_group TEXT,
    neighbourhood TEXT,
    latitude FLOAT,
    longitude FLOAT,
    room_type TEXT,
    price INTEGER,
    minimum_nights INTEGER,
    number_of_reviews INTEGER,
    last_review DATE,
    reviews_per_month FLOAT,
    calculated_host_listings_count INTEGER,
    availability_365 INTEGER
);

Теперь мы можем загрузить данные (из набора данных kaggle ):

\copy mydata FROM AB_NYC_2019.csv WITH CSV HEADER;

Подробнее см. COPY .

После этого мы можем выйти из консоли postgres и вернуться в Python / Pandas.

Pandas

Прежде всего, убедитесь, что у вас есть библиотека Python, способная подключаться к postgres, например psycopg2-binary.

Импорт:

import pandas
import psycopg2

Connectiong и чтение:

connection = psycopg2.connect("postgresql://jdoe:supersecret@192.0.2.1/stackoverflow")
df = pandas.read_sql("SELECT * FROM mydata", connection, index_col="id")

Приложение - Запуск postgres в Docker

Новый экземпляр Docker можно запустить с помощью следующей команды:

docker run \
    --rm \
    --name pg-docker \
    -e POSTGRES_PASSWORD=docker \
    -p 5432:5432 \
    postgres

Это создаст базу данных с именем postgres, к которой может получить доступ пользователь postgres и пароль docker. Эти значения могут использоваться в приведенном выше примере и, конечно, не должны использоваться в производстве.

0 голосов
/ 06 октября 2019

отметьте это, https://pandas.pydata.org/pandasdocs/stable/reference/api/pandas.DataFrame.to_sql.html Панды с SQL будет хорошим решением

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...