我有一个包含时间序列数据的postgres数据库。数据库的大小约为1 GB。目前读取数据,这就是我的工作
import psycopg2
import pandas as pd
import pandas.io.sql as psql
conn = psycopg2.connect(database="metrics", user="*******", password="*******", host="localhost", port="5432")
cur = conn.cursor()
df = psql.read_sql("Select * from timeseries", conn)
print(df)
但是这会将整个数据加载到内存中。现在我知道可以将数据库转储到csv文件的技术,然后可以按照这里建议的块来读取csv文件How to read a 6 GB csv file with pandas
但对我来说这不是一个选项,因为数据库将不断变化,我需要动态阅读。是否有任何技术可以读取数据库内容或者使用任何第三方库?
答案 0 :(得分:1)
pd.read_sql()也有参数chunksize
,因此您可以从块中读取SQL表/查询中的数据:
for df in pd.read_sql("Select * from timeseries", conn, chunksize=10**4):
# process `df` chunk here...
答案 1 :(得分:0)
考虑使用psql
将此文件直接加载到数据库。从您的控制台尝试此命令:
$ cat file.csv | psql db -c "COPY your_table FROM STDIN DELIMITER ',' CSV HEADER"
示例:
考虑以下表格结构..
CREATE TEMPORARY TABLE t (foo INT, bar TEXT);
以及以下CSV文件..
x,y
1,foo
2,bar
3,foo-bar
从终端执行以下命令:
$ cat /tmp/file.csv | psql db -c "COPY t FROM STDIN DELIMITER ',' CSV HEADER"
以下是您的数据:
db=# SELECT * FROM t;
a | b
---+---------
1 | foo
2 | bar
3 | foo-bar
(3 Zeilen)