在python中,可以从不同的用户操作同一文件吗?让我说得更清楚一些:我想做一个可以读取数据库的软件(我使用的是pandas)。该软件将在不同的计算机上同时使用,并且它将读取和写入相同的数据库。那么,有没有一种工具可以持续检查数据库中最近更新的语音,并在每个用户的RAM中刷新它?或者有更聪明的方法来达到这个目的呢?
非常感谢!
发布于 2019-10-06 16:36:24
任何与ACID兼容的数据库(在这种情况下,“隔离”特性是关键)都会提供这些特性。一个很好的免费数据库是PostgreSQL,另一个选择(如果您可以访问它的话)是MS-SQL Server。
您确实希望使用符合ACID的数据库来完成此任务,而不是自己处理此问题。
这个问题已经存在了几十年,并且已经得到了解决。如果你想处理磁盘上的普通文件,有太多的边缘情况会让你的生活变得非常困难。
另外,pandas非常有能力从这样的数据库中读取数据。
一些基础知识
考虑到这个问题的表达方式,我冒然假设这对你来说可能是一个新领域,所以这里有一些“最小”的指导来帮助你入门。但你必须阅读的一些东西是:
假设您从CSV文件开始,下面是一个简单的示例。
准备数据库
您首先需要将CSV数据加载到数据库中。出于本例的考虑,我将使用PostgreSQL。其他数据库将使用不同的语法来加载数据。
我也会非常自由地选择数据类型,我不会使用“主键”。但这只是为了让它尽可能简单。你的应该为你的最终解决方案阅读这些主题!
因此,让我们假设以下关于DB的信息(请参阅下面关于如何使用docker运行测试实例的附录):
此外,让我们使用一个免费的数据文件来发挥作用。让我们使用some AirBNB data (这是在撰写本文时出现在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 data-set):
\copy mydata FROM AB_NYC_2019.csv WITH CSV HEADER;
详情请参见COPY。
在此之后,我们可以退出postgres控制台并返回到Python/Pandas。
熊猫
首先,确保您有一个能够连接到psycopg2-binary
等postgres的Python库。
导入:
import pandas
import psycopg2
连接和阅读:
connection = psycopg2.connect("postgresql://jdoe:supersecret@192.0.2.1/stackoverflow")
df = pandas.read_sql("SELECT * FROM mydata", connection, index_col="id")
附录-在docker中运行postgres
可以使用以下命令启动新的docker实例:
docker run \
--rm \
--name pg-docker \
-e POSTGRES_PASSWORD=docker \
-p 5432:5432 \
postgres
这将创建一个名为postgres
的数据库,用户postgres
和密码docker
都可以访问该数据库。这些值可用于上述示例,当然不应在生产中使用。
发布于 2019-10-06 16:34:45
检查这一点,https://pandas.pydata.org/pandasdocs/stable/reference/api/pandas.DataFrame.to_sql.html pandas with SQL将是一个很好的解决方案
https://stackoverflow.com/questions/58259175
复制