从数据库中的 table 获取数据
Getting data from table in database
我想从 postgresql
数据库中提取数据并在脚本中使用该数据(以数据帧格式)。这是我的初步尝试:
from pandas import DataFrame
import psycopg2
conn = psycopg2.connect(host=host_address, database=name_of_database, user=user_name, password=user_password)
cur = conn.cursor()
cur.execute("SELECT * FROM %s;" % name_of_table)
the_data = cur.fetchall()
colnames = [desc[0] for desc in cur.description]
the_frame = DataFrame(the_data)
the_frame.columns = colnames
cur.close()
conn.close()
注意:我知道我不应该使用 "string parameters interpolation (%) to pass variables to a SQL query string",但这对我来说非常有用。
是否有更直接的方法?
编辑:这是我从所选答案中使用的内容:
import pandas as pd
import sqlalchemy as sq
engine = sq.create_engine("postgresql+psycopg2://username:password@host:port/database")
the_frame = pd.read_sql_table(name_of_table, engine)
Pandas 可以直接从 Postgres 加载数据:
import psycopg2
import pandas.io.sql as pdsql
conn = psycopg2.connect(...)
the_frame = pdsql.read_frame("SELECT * FROM %s;" % name_of_table, conn)
如果你有最近的 pandas (>=0.14),你应该使用 read_sql_query/table
(read_frame
已被弃用)与 sqlalchemy 引擎:
import pandas as pd
import sqlalchemy
import psycopg2
engine = sqlalchemy.create_engine("postgresql+psycopg2://...")
the_frame = pd.read_sql_query("SELECT * FROM %s;" % name_of_table, engine)
the_frame = pd.read_sql_table(name_of_table, engine)
这是另一种方法:
# run sql code
result = conn.execute(sql)
# Insert to a dataframe
df = DataFrame(data=list(result), columns=result.keys())
我想从 postgresql
数据库中提取数据并在脚本中使用该数据(以数据帧格式)。这是我的初步尝试:
from pandas import DataFrame
import psycopg2
conn = psycopg2.connect(host=host_address, database=name_of_database, user=user_name, password=user_password)
cur = conn.cursor()
cur.execute("SELECT * FROM %s;" % name_of_table)
the_data = cur.fetchall()
colnames = [desc[0] for desc in cur.description]
the_frame = DataFrame(the_data)
the_frame.columns = colnames
cur.close()
conn.close()
注意:我知道我不应该使用 "string parameters interpolation (%) to pass variables to a SQL query string",但这对我来说非常有用。
是否有更直接的方法?
编辑:这是我从所选答案中使用的内容:
import pandas as pd
import sqlalchemy as sq
engine = sq.create_engine("postgresql+psycopg2://username:password@host:port/database")
the_frame = pd.read_sql_table(name_of_table, engine)
Pandas 可以直接从 Postgres 加载数据:
import psycopg2
import pandas.io.sql as pdsql
conn = psycopg2.connect(...)
the_frame = pdsql.read_frame("SELECT * FROM %s;" % name_of_table, conn)
如果你有最近的 pandas (>=0.14),你应该使用 read_sql_query/table
(read_frame
已被弃用)与 sqlalchemy 引擎:
import pandas as pd
import sqlalchemy
import psycopg2
engine = sqlalchemy.create_engine("postgresql+psycopg2://...")
the_frame = pd.read_sql_query("SELECT * FROM %s;" % name_of_table, engine)
the_frame = pd.read_sql_table(name_of_table, engine)
这是另一种方法:
# run sql code
result = conn.execute(sql)
# Insert to a dataframe
df = DataFrame(data=list(result), columns=result.keys())