有没办法在postgreSQL中查询oracle上的数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有没办法在postgreSQL中查询oracle上的数据相关的知识,希望对你有一定的参考价值。
参考技术A 提供三个思路:第一个:
PostgreSQL中,是可以创建各种语言写的Function的。
你可以用C写一个PostgreSQL的Function,
http://www.postgresql.org/docs/9.2/static/xfunc-c.html
在此Function中,可以试着去调用Oracle的C语言访问接口访问Oracle数据库
第二个:
与第一类似。PostgreSQL中,可以运行各种语言:如PL/pgSQL,PL/pgPerl等。
如果你安装了PL/Java
http://pljava.projects.pgfoundry.org/
http://www.slideshare.net/petereisentraut/postgresql-and-pljava
可考虑在PL/Java的Function中,通过Oracle的JDBC接口来访问Oracle。
下面的链接中非常明确地提到了一个在PostgreSQL的PL/java中访问Oracle的例子:
http://my.opera.com/myrkraverk/blog/2012/06/21/performing-sql-with-pl-java-in-postgresql
第三个:
采用DBI-Link
其简介说:
DBI-Link is a partial implementation of the SQL/MED portion of the SQL:2008 specification written in PL/Perl....
If you want to join Oracle tables from PostgreSQL on Debian GNU/Linux, you can use DBI-Link. Also, you can use PostgreSQL queries to access Oracle tables as local schemas.
DBI-Link,部分符合SQL:2008标准,
故此按照此标准你就可以在PostgreSQL中访问Oracle了。
如下的链接是在Debian Linux上的安装和使用例子:
http://www.techforce.com.br/news/linux_blog/dbi_link_to_oracle_for_postgresql_on_debian#.Ud49CflIjJA
有没有办法在熊猫数据框中运行 postgresql 查询?
【中文标题】有没有办法在熊猫数据框中运行 postgresql 查询?【英文标题】:Is there a way to run posqresql queries in a pandas dataframe? 【发布时间】:2021-04-10 22:57:14 【问题描述】:我有这样的熊猫数据框:
created_at | lat | long | hex_ID | |
---|---|---|---|---|
0 | 2020-10-13 15:12:18.682905 | 28.690628 | 77.323285 | 883da1ab0bfffff |
1 | 2020-10-12 22:49:05.886170 | 28.755408 | 77.112289 | 883da18e87fffff |
2 | 2020-10-13 15:24:17.692375 | 28.690571 | 77.323335 | 883da1ab0bfffff |
3 | 2020-10-12 23:21:13.700226 | 28.589922 | 77.082738 | 883da112a1fffff |
4 | 2020-10-13 15:43:58.887592 | 28.649227 | 77.339063 | 883da1a941fffff |
我想像这样转换它
created_at | hex_id | count | |
---|---|---|---|
0 | 2020-10-28 22:00:00 | 883da11185fffff | 4 |
1 | 2020-09-09 10:00:00 | 883da111ebfffff | 2 |
2 | 2020-12-02 20:00:00 | 883da10769fffff | 2 |
3 | 2020-10-16 07:00:00 | 883da111c3fffff | 1 |
4 | 2020-12-13 11:00:00 | 883da11747fffff | 4 |
到目前为止,我正在将数据框转储到 postgres 中并运行以下查询,然后导出数据并最后导入到我的笔记本中。
查询:
SELECT created_at('hour', timestamp),count(lat),hex_id FROM public."ML_Data"
group by created_at('hour', timestamp),hex_id
我想知道我是否可以直接在笔记本文件中进行操作
【问题讨论】:
也许看看pd.read_sql
?
或者你可以简单地做一个 pd.DataFrame.groupby 而不是将它转储到 postgres 中进行聚合。
@ABC 我试过 pd.read_Sql 但我不认为上面的查询会在它上面运行并且 group by 是好的,但我想要特定格式的数据框,有没有参考代码
【参考方案1】:
只需在 df 中使用 groupy。
# 2020-10-13 15:12:18.682905 -> 2020-10-13 15:00:00
df['created_at_n'] = df['created_at'].astype(str).str.split(':').str[0] + ':00:00'
df.groupby(['created_at_n', 'hex_id'])['lat'].count()
【讨论】:
【参考方案2】:通常我使用psycopg2
从postgres中获取数据,示例代码:
import psycopg2
from psycopg2 import sql
with psycopg2.connect(
host='your_host',
database='your_database',
user='your_username',
password='your_password') as con:
cursor = con.cursor()
query = sql.SQL('your_query_string')
cursor.execute(query)
data = cursor.fetchall()
data = pd.DataFrame(data, columns=col_names) # your data column names
或者我认为你可以pd.read_sql
,看看这个post。
【讨论】:
让我分享一些关于我的数据的更多见解,我已经将我的笔记本连接到数据库,并使用 pycopg2 查询了数据。从中我得到 3 列 1.created_at 2.lat 3.long 从这些 lat long 使用 python 库 H3 ,我正在生成 hex_id 。 .所以这样做我得到了第一个表,现在我想将第一个表转换为提供的第二个表, 那么您可以使用 .groupby 作为@Ferris 为您提供的示例。以上是关于有没办法在postgreSQL中查询oracle上的数据的主要内容,如果未能解决你的问题,请参考以下文章
获取 django 在 postgresql 上运行的所有查询
有没有办法列出 ORACLE 查询中使用的表和列? [复制]