无法使用sqlalchemy访问使用Python程序创建的表

时间:2014-09-10 04:33:03

标签: python postgresql sqlalchemy

我在DB postgres中使用sqlalchemy使用python脚本创建了一些表。 当我使用shell为这个uname:password组合登录db并执行命令来显示表 \ DT 它给了我以下输出

 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)

使用普通的python脚本创建表测试,使用下面给出的简单sqlalchemy代码创建user,user_prefs,

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))
)

metadata.create_all(发动机)

但是表CLASS_DESCRIPTOR是由另一个带有sqlalchemy的python脚本创建的。 所以当我SELECT * from CLASS_DESCRIPTOR时 它给了我以下错误

ERROR:  relation "class_descriptor" does not exist.

1 个答案:

答案 0 :(得分:2)

postgresql在使用双引号指定标识符时区分大小写,如

create table "FOO" (...);

但在不存在引号时将案例(全部小写)标准化;为了使用该表,您必须为postgresql提供正确的(并因此引用的)标识符。那就是:

select * from "CLASS_DESCRIPTOR"