Sql python WebFramework中的序列/标识支持
目前我正在评估带有ORM层的web框架,我偶然发现了一个有趣的问题。我在具有不同数据库的JavaEE(EJB3/JPA)应用程序中使用了带有ID列的表。在SAPDB中,我可以定义一个序列并使用jpa sequence generator注释来处理它,就像我以前在oracle数据库中所做的那样。当我切换到SQLServer2005时,我突然不得不将整个过程替换为标识注释,因为SQLServer显然就是这样处理id生成的。我有点失望JPA没有给我一个以上的抽象,我想这不是我在使用不同数据库时遇到的唯一限制 现在来回答我的问题:例如,我在web2py中读到,所有表都必须更改为使用自动增量索引。它是否也支持序列生成器或标识列?其他web框架如何?它们是否允许我跨多个遗留数据库移植应用程序?也就是说,除了标识列和字符串的数据类型定义之间的细微差异外,表定义是相同的(我记得在那里修改了create语句,但我记不起到底需要什么)Sql python WebFramework中的序列/标识支持,sql,jpa,ejb-3.0,sqlalchemy,web2py,Sql,Jpa,Ejb 3.0,Sqlalchemy,Web2py,目前我正在评估带有ORM层的web框架,我偶然发现了一个有趣的问题。我在具有不同数据库的JavaEE(EJB3/JPA)应用程序中使用了带有ID列的表。在SAPDB中,我可以定义一个序列并使用jpa sequence generator注释来处理它,就像我以前在oracle数据库中所做的那样。当我切换到SQLServer2005时,我突然不得不将整个过程替换为标识注释,因为SQLServer显然就是这样处理id生成的。我有点失望JPA没有给我一个以上的抽象,我想这不是我在使用不同数据库时遇到的唯
在获取ID方面也有区别——使用序列生成器,您可以在提交之前访问生成的ID,而在MySQL中使用auto_increment,恐怕不行。SQLAlchemy可以很好地处理这两种方式。给出如下模式声明:
class Foo(Base):
id = Column(Integer, Sequence('foo_seq', optional=True), primary_key=True)
...
SQLAlchemy将使用数据库的内置自动递增范例(如果有),否则将定义一个序列。它还管理所生成id的获取,但由于API是最小公分母,因此显然无法在插入之前访问它。当然,如果您愿意,您可以手动获取id。例如,对于具有序列,但也具有由序列支持的自动递增的serial
数据类型的PostgreSQL,这将使用serial
数据类型。对于旧版本,它将自动预取插入中使用的下一个序列值,对于SQLAlchemy 0.6系列和Postgres 8.3+它将使用insert。。。正在返回…
功能以一次性插入和获取