gpt4 book ai didi

python - Psycopg2 不喜欢以小写字母开头的表名

转载 作者:太空狗 更新时间:2023-10-29 22:05:14 24 4
gpt4 key购买 nike

我在 Windows XP 下运行 ActiveState 的 ActivePython 2.6.5.12 和 PostgreSQL 9.0 Beta 1。

如果我创建一个首字母大写的表(即 Books),当我运行 select 语句时,psycopg2 返回“编程错误:关系“books”不存在”错误消息:execute("SELECT * 来自书籍")。如果我运行:execute("SELECT * FROM books"),也会返回同样的错误。但是,如果我将表格更改为小写的名字(即书籍),则上述任一语句都有效。

表名是否应该有一个小写的名字?这是设置、功能还是错误?我是否遗漏了一些明显的东西?

最佳答案

要添加到另一个答案中,Postresql 关于标识符(表名和列名)区分大小写的行为是:

  • 如果名字没有被引用,它会被转换成小写。否则,它不会受到影响。
  • 然后,尝试进行区分大小写的匹配

这不仅适用于查询,也适用于模式操作;特别是:表创建。

The golden rule is consistency :

If you want to write portable applications you are advised to always quote a particular name or never quote it

发布的问题可能是因为在创建时引用了表名和列名(因此,它们没有转换为小写)。所以,现在它们必须在所有查询中被引用(并且区分大小写)。

通常,一切都按预期工作。

db=# create table Xxx (id integer); -- unquoted, will be converted to lowercase
CREATE TABLE
db=# select * from xXx; -- this works ok
id
----
(0 rows)
db=# create table "Xxxx" (id integer); -- will be left untouched
CREATE TABLE
db=# select * from xxxx; -- bad
ERROR: relation "xxxx" does not exist
LINE 1: select * from xxxx;
db=# select * from Xxxx; -- bad
ERROR: relation "xxxx" does not exist
LINE 1: select * from Xxxx;
^
db=# select * from "Xxxx"; -- ok
id
----
(0 rows)

db=# \dt *xx*
List of relations
Schema | Name | Type | Owner
--------+------+-------+----------
public | Xxxx | table | postgres
public | xxx | table | postgres

关于python - Psycopg2 不喜欢以小写字母开头的表名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2774406/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com