Python 无法通过pyodbc从postgresql数据库的一个表中进行选择-如何调试

Python 无法通过pyodbc从postgresql数据库的一个表中进行选择-如何调试,python,postgresql,pyodbc,Python,Postgresql,Pyodbc,我有一个postgresql数据库,其中包含一些由drupal制作的表,还有一些是我自己制作的。然后我有一个pythonapi,使用pyodbc查询数据库 只有一个表,我不能通过pyodbc从中选择。如果我打印查询并将其粘贴到pgadminIII中,那么它将给出预期的结果,如果我在python代码中更改表,那么它将给出正确的结果 问题是 select id from a_company where name = 'somename' 结果 7 8 9 etc 50行int-id 我的pyth

我有一个postgresql数据库,其中包含一些由drupal制作的表,还有一些是我自己制作的。然后我有一个pythonapi,使用pyodbc查询数据库

只有一个表,我不能通过pyodbc从中选择。如果我打印查询并将其粘贴到pgadminIII中,那么它将给出预期的结果,如果我在python代码中更改表,那么它将给出正确的结果

问题是

select id from a_company where name = 'somename'
结果

7
8
9
etc 50行int-id

我的python代码是

sql = """select id from a_company where name = 'somename'"""
curs = self._connection.cursor()
sql = self._ConvertToPostGres(sql) #drops [] etc, as the initial code was for MSSQL
curs.execute(sql)
f = curs.fetchall()
通过pyodbc的调用返回

None
我可以从使用相同连接的其他表中进行选择,所以连接字符串无关紧要

我最好的猜测是这是一个权限问题,我对这个特定的表做了一些愚蠢的事情

有人能建议如何调试这个吗

通过pgadmin创建表:

-- Table: a_company

-- DROP TABLE a_company;

CREATE TABLE a_company
(
  id integer NOT NULL DEFAULT nextval('a_company_id_seq'::regclass),
  name character varying,
  abn character varying,
  url character varying,
  anzsic character varying(5),
  address character varying,
  area integer,
  sell_equipment boolean,
  recycling_provider boolean,
  monthly_matches boolean,
  user_id bigint,
  latitude double precision,
  longitude double precision,
  geography geography,
  CONSTRAINT a_company_pkey PRIMARY KEY (id),
  CONSTRAINT fk_a_company_a_anzsic_codes FOREIGN KEY (anzsic)
      REFERENCES a_anzsic_codes (code) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (
  OIDS=FALSE
);
ALTER TABLE a_company
  OWNER TO aspire;

-- Index: fki_a_company_aspire_a_codes

-- DROP INDEX fki_a_company_aspire_a_codes;

CREATE INDEX fki_a_company_aspire_a_codes
  ON a_company
  USING btree
  (anzsic COLLATE pg_catalog."default");

如果我修改了它,使之足以更改表名,那么我会得到另一个“正常工作”的表。但是我将id行更改为id序列,而不是指定序列

您可以尝试以下方法:

def load_data(sql, columns):
    sql_data = []

    curs = self._connection.cursor()
    sql = self._ConvertToPostGres(sql)

    try:
        curs.execute(sql)
        rows = curs.fetchall()
        pass
    except Exception as e:
        print(e)
        rows = pd.read_sql(sql, self._connection)

    for row in rows:
        sql_data.append(list(row))

    df = pd.DataFrame(data=sql_data, columns=columns)

    return df


sql = "select id from a_company where name = '{0}'".format(somename)
data = load_data(sql, ['id'])


在该特定表上运行查询时会得到什么?请使用pyodbc发布python代码以启动连接、执行查询并获取结果。我的最佳猜测是这是一个权限问题-因此您已确保使用Pythons脚本使用的相同凭据登录到pgAdmin,然后在那里尝试了查询,对吗?好的,那么请您的问题包括1您可以从pgAdmin获得的有关表的CREATE TABLE语句和2您正在使用的Python代码。@BryanEargle:如果您写一个“检查您发送的实际sql”的答案,我将接受它。。。