我通过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)
答案 0 :(得分:1)
常见错误。
user
是current_user
的别名,是{1} SQL标准伪函数的关键字。
如果您想要该名称的表或列,请使用"user"
(即双引号标识符)。或者选择您的表/列名称不要与reserved keywords冲突。
ORM和查询生成器应该自动双引所有关键字(或所有标识符,因为它没有任何损害)。不幸的是,大部分都没有。