无法访问使用sqlalchemy的Python程序创建的表
我已经使用python脚本在DB postgres中使用sqlalchemy创建了一些表。 当我为uname:password组合使用shell登录db并执行命令以显示表时 \dt 它给我以下输出无法访问使用sqlalchemy的Python程序创建的表,python,postgresql,sqlalchemy,Python,Postgresql,Sqlalchemy,我已经使用python脚本在DB postgres中使用sqlalchemy创建了一些表。 当我为uname:password组合使用shell登录db并执行命令以显示表时 \dt 它给我以下输出 Schema | Name | Type | Owner --------+------------------+-------+---------------- public | CLASS_DESCRIPTOR | table | prefix_m
Schema | Name | Type | Owner
--------+------------------+-------+----------------
public | CLASS_DESCRIPTOR | table | prefix_manager
public | test | table | prefix_manager
public | user | table | prefix_manager
public | user_prefs | table | prefix_manager
(6 rows)
tables测试是使用普通python脚本创建的,user,user\u pref是使用下面给出的简单sqlalchemy代码创建的
from sqlalchemy import *
engine = create_engine('postgresql://prefix_manager:password1@localhost:5432/prefix_manager')
metadata = MetaData()
user = Table('user', metadata,
Column('user_id', Integer, primary_key = True),
Column('user_name', String(16), nullable = False),
Column('email_address', String(60), key='email'),
Column('password', String(20), nullable = False)
)
user_prefs = Table('user_prefs', metadata,
Column('pref_id', Integer, primary_key=True),
Column('user_id', Integer, ForeignKey("user.user_id"), nullable=False),
Column('pref_name', String(40), nullable=False),
Column('pref_value', String(100))
)
元数据。创建所有(引擎)
但是表CLASS\u描述符
是由另一个使用sqlalchemy的python脚本创建的。
所以当我做时,从类描述符中选择*
它给了我以下的错误
ERROR: relation "class_descriptor" does not exist.
当使用双引号指定标识符时,postgresql区分大小写,如
create table "FOO" (...);
但当不存在引号时,规范化大小写(全部小写);为了使用该表,您必须为postgresql提供一个大小写正确的标识符(因此带引号)。即:
select * from "CLASS_DESCRIPTOR"
完全正确由于PostgreSQL的大小写约定,我发现在PostgreSQL中使用所有小写名称或类似的名称更容易。你可以使用任何你喜欢的大小写,只要你跳过引号,引号会产生令人惊讶的效果,而不是一般的大小写。当然,但是PG自己的管理工具(如pgadmin)无论在代码中如何指定,均以所有小写字母显示未加引号的名称。如果您想在pgadmin中轻松区分长名称中的单词,下划线是一种简单的方法。。工作正常。