Python sqlalchemy列名为user,不一致
我正在通过sqlalchemy(python)访问postgresql数据库。Python sqlalchemy列名为user,不一致,python,sql,postgresql,sqlalchemy,Python,Sql,Postgresql,Sqlalchemy,我正在通过sqlalchemy(python)访问postgresql数据库。 在那里我有一个像这样的塔: SELECT * from mytable; id | user | password | host | port ----+------+----------+-----------------+------ 1 | abc | def | 127.0.0.1 | 21 但是现在如果我尝试做一个等价的(我想…)从我的代码中选
在那里我有一个像这样的塔:
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)
常见的错误
user
是的别名,是SQL标准伪函数的关键字
如果您想要该名称的表或列,请使用“user”
(即双重引用标识符)。或者选择不与之冲突的表/列名
ORMs和查询生成器应该自动双引号引用所有关键字(或者所有标识符,因为这样做没有坏处)。不幸的是,大多数人没有