2010-06-25 60 views
0

我试图编写一些Python3与Raritan Power IQ(http://www.raritan.com/products/power-management/power-iq/)系统上的后端PostgreSQL服务器接口。Py-Postgresql和Raritan PowerIQ - 似乎无法找到表?

我已经使用pgAdminIII连接到服务器,并且它与我的凭据很好地连接。我可以看到数据库以及每个数据库中的模式。

我现在正在使用py-postgresql尝试编写脚本,并且遇到了一些问题。

我用下面的连接:

postgresql.open("pq://odbcuser:[email protected]:5432/raritan") 

连接到数据库的Raritan使用用户“odbcuser”和密码“密码”(不,这不是真正的一个......笑)。

它似乎连接成功。我可以运行一些查询,例如

ps = db.prepare("SELECT * from pg_tables;") 
ps() 

设法列出“raritan”数据库中的所有表/视图。

但是,我然后尝试访问一个特定的视图,并打破。 “raritan”数据库有两种模式,“odbc”和“public”。

我可以从公共模式访问视图。例如:

ps = db.prepare("SELECT * from public.qrypwrall;") 
ps() 

作品在一定程度上 - 我得到许可pgAdminIII下被拒绝的错误,一样的我,我的帐户没有访问该观点,但syntactally,似乎很好,它确实找到表。

但是,当我尝试访问“odbc”下的视图时,它会中断。例如:

>>> ps = db.prepare("SELECT * from odbc.Aisles;") 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "C:\Python31\lib\site-packages\postgresql\driver\pq3.py", line 2291, in prepare 
ps._fini() 
    File "C:\Python31\lib\site-packages\postgresql\driver\pq3.py", line 1393, in _ 
fini 
    self.database._pq_complete() 
    File "C:\Python31\lib\site-packages\postgresql\driver\pq3.py", line 2538, in _ 
pq_complete 
    self.typio.raise_error(x.error_message, cause = getattr(x, 'exception', None 
)) 
    File "C:\Python31\lib\site-packages\postgresql\driver\pq3.py", line 471, in ra 
ise_error 
    self.raise_server_error(error_message, **kw) 
    File "C:\Python31\lib\site-packages\postgresql\driver\pq3.py", line 462, in ra 
ise_server_error 
    raise server_error 
postgresql.exceptions.UndefinedTableError: relation "odbc.aisles" does not exist 

    CODE: 42P01 
    LOCATION: File 'namespace.c', line 268, in RangeVarGetRelid from SERVER 
STATEMENT: [parsing] 
    statement_id: py:0x10ca1b0 
    string: SELECT * from odbc.Aisles; 
CONNECTION: [idle] 
    client_address: 10.180.9.213/32 
    client_port: 2612 
    version: 
    PostgreSQL 8.3.7 on i686-redhat-linux-gnu, compiled by GCC gcc (GCC) 4.1.2 2 
0071124 (Red Hat 4.1.2-42) 
CONNECTOR: [IP4] pq://odbcuser:***@10.180.138.121:5432/raritan 
    category: None 
DRIVER: postgresql.driver.pq3.Driver 

不过,我可以访问相同的表(过道)pgAdminIII下细,使用相同的凭据(而不像公众,其实我有权限所有这些表

是否有任何理由。那py-postgresql可能看不到这些视图?或者任何你可以从错误信息中挑出的东西?

我怀疑它是与PowerIQ混合使用的表名(例如“Aisle”)。然而,我不确定如何在psycopg中处理这些问题,我怎么修改说,我的cursor.execute喜欢引用表格?

cursor.execute('SELECT * from "public.Aisles"') 

也不起作用。

干杯, 维克多

+0

你有没有试过这种方式:'从公共选择*。“过道”'? – 2010-06-25 09:56:05

+0

@Milen:呃,你知道,那真的有效吗? =)。我不敢相信它就是这样 - 当我在整个事物(模式和表格)中引用引号时,它不起作用。奇怪的。你认为你可以重新发布你的答案作为答案,所以我可以给你点的好吗? – victorhooi 2010-06-27 23:58:38

回答

1

你试过这样说:“SELECT * FROM公共 “通道”?

引用整个事情使它成为一个非限定(无模式)的表名,其中有一个点。

+0

根据上面的注释,在两个引号周围使用引号将查找名为public.Aisles的表 - 包括点和大写名称,未分隔为模式和表名。 – 2010-06-28 08:48:56