sqlalchemy列命名为user,不一致

时间:2014-04-04 09:04:17

标签: python sql postgresql sqlalchemy

我通过sqlalchemy(python)连接postgresql数据库 在那里,我有一个像这样的人:

SELECT * from mytable;

 id | user | password |      host       | port 
----+------+----------+-----------------+------
  1 | abc  | def      |    127.0.0.1    |   21 

但是现在如果我尝试做一个等效的(我想......)从我的代码中选择如下:

s = sql.select(columns=['user', 'password', ...]).select_from('mytable')

而不是用户列(abc)中的条目,我获得了数据库用户的名称。

另外我注意到,如果在select语句中明确指定了列名,psql客户端会将用户字段重命名为'current_user':

SELECT user, password, host, port FROM mytable;

 current_user | password |      host       | port 
--------------+----------+-----------------+------
 abc          | def      |    127.0.0.1    |   21

我是否必须重命名我的所有表格列,以避免混淆? 或者sqlalchemy是否为这个问题提供了解决方案?

以下是表格规范:

\dS mytable;
                                Table "public.mytable"
  Column  |            Type             |                            Modifiers                             
----------+-----------------------------+--------------------------------------------------------------------
 id       | integer                     | not null default nextval('mytable_id_seq'::regclass)
 user     | character varying           | not null
 password | character varying           | not null
 host     | character varying           | not null
 port     | integer                     | not null

Indexes:
    "mytable_pkey" PRIMARY KEY, btree (id)

1 个答案:

答案 0 :(得分:1)

常见错误。

usercurrent_user的别名,是{1} SQL标准伪函数的关键字。

如果您想要该名称的表或列,请使用"user"(即双引号标识符)。或者选择您的表/列名称不要与reserved keywords冲突。

ORM和查询生成器应该自动双引所有关键字(或所有标识符,因为它没有任何损害)。不幸的是,大部分都没有。