在Shell中编辑Python类和SQLAlchemy
我正在终端上做一个shell脚本,跟着这个教程 http://docs.sqlalchemy.org/en/latest/orm/tutorial.html 学习SQLAlchemy的映射声明。为了这个,我需要输入
>>> from sqlalchemy import Column, Integer, String
>>> class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
fullname = Column(String)
password = Column(String)
def __repr__(self):
return "<\User(name='%s', fullname='%s', password='%s')>" % (
self.name, self.fullname, self.password)
问题是,当我输入password = Column(String)后,按了两次回车,结果变成了>>>。然后我又把所有内容重新输入了一遍,但出现了一个错误,因为这个类已经存在了……我不太确定该怎么解决。怎么在shell脚本中打开那个类并编辑它(添加def repr)呢?
下面是出现的错误信息:
/Users/GaryPeters/TFsqlAlc001/lib/python2.7/site-packages/sqlalchemy/ext/declarative/clsregistry.py:160: SAWarning: This declarative base already contains a class with the same class name and module name as __main__.User, and will be replaced in the string-lookup table.
existing.add_item(cls)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/GaryPeters/TFsqlAlc001/lib/python2.7/site-packages/sqlalchemy/ext/declarative/api.py", line 53, in __init__
_as_declarative(cls, classname, cls.__dict__)
File "/Users/GaryPeters/TFsqlAlc001/lib/python2.7/site-packages/sqlalchemy/ext/declarative/base.py", line 251, in _as_declarative
**table_kw)
File "/Users/GaryPeters/TFsqlAlc001/lib/python2.7/site-packages/sqlalchemy/sql/schema.py", line 339, in __new__
"existing Table object." % key)
sqlalchemy.exc.InvalidRequestError: Table 'users' is already defined for this MetaData instance. Specify 'extend_existing=True' to redefine options and columns on an existing Table object.
1 个回答
2
只需关闭并重新打开命令行,然后重新输入所有内容,这次确保只按一次 enter,而不是按两次。
另外,每当你遇到空行时,记得加上缩进——如果你按了 enter 后,再按 tab 或 space 适当的次数,使得缩进到正确的级别,那么你就可以再次按 enter,而不会让命令行结束你的定义并再次显示 >>>
。
你也应该能够在命令行中重新定义类,所以我不太明白你说的“出现了错误”是什么意思——如果你能编辑你的帖子,提供具体的错误信息,那会很有帮助。