在Sqlalchemy中,什么';使用Base和table定义表是不同的

在Sqlalchemy中,什么';使用Base和table定义表是不同的,sqlalchemy,Sqlalchemy,我知道我可以使用以下表格定义表格: user = Table('user', metadata, Column('user_id', Integer, primary_key = True), ) 和使用基地: Base = declarative_base() class User(Base): __tablename__ = 'user' user_id= Column(Integer, primary_key = True) 但是有什么不

我知道我可以使用以下表格定义表格:

user = Table('user', metadata,
    Column('user_id', Integer, primary_key = True),
)
和使用基地:

Base = declarative_base()    
class User(Base):
        __tablename__ = 'user'
        user_id= Column(Integer, primary_key = True)
但是有什么不同呢

Base = declarative_base()

class User(Base):
    __tablename__ = 'user'

    id = Column('id', Integer, primary_key=True)
    name = Column('name', Unicode(64))
只是语法上的糖

metadata = MetaData()

user = Table('user', metadata,
    Column('id', Integer, primary_key=True),
    Column('name', Unicode(64)),
)

class User(object):
    pass

mapper(User, user)  # this will modify the User class!

在第一个示例中,您只定义了一个表,在第二个示例中,定义了一个表和一个映射到此表的类。这是一种声明式映射样式,它比经典映射更简洁,因为经典映射必须分别定义表和映射。我建议阅读SQLAlchemy文档,至少是ORM和核心教程,以便更好地掌握SA基础知识。@AudriusKažukauskas如果您添加一些链接,我会将其作为一个答案,因为它回答了问题,没有更多的内容要说。声明式样式只是
Table
Mapper
的组合,使用户更容易阅读(而且更清晰)。其他所有内容都应该从文档中读取。只是为了所有遇到这个的人