我试图编写一些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"')
也不起作用。
干杯, 维克多
你有没有试过这种方式:'从公共选择*。“过道”'? – 2010-06-25 09:56:05
@Milen:呃,你知道,那真的有效吗? =)。我不敢相信它就是这样 - 当我在整个事物(模式和表格)中引用引号时,它不起作用。奇怪的。你认为你可以重新发布你的答案作为答案,所以我可以给你点的好吗? – victorhooi 2010-06-27 23:58:38