Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql python WebFramework中的序列/标识支持_Sql_Jpa_Ejb 3.0_Sqlalchemy_Web2py - Fatal编程技术网

Sql python WebFramework中的序列/标识支持

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没有给我一个以上的抽象,我想这不是我在使用不同数据库时遇到的唯

目前我正在评估带有ORM层的web框架,我偶然发现了一个有趣的问题。我在具有不同数据库的JavaEE(EJB3/JPA)应用程序中使用了带有ID列的表。在SAPDB中,我可以定义一个序列并使用jpa sequence generator注释来处理它,就像我以前在oracle数据库中所做的那样。当我切换到SQLServer2005时,我突然不得不将整个过程替换为标识注释,因为SQLServer显然就是这样处理id生成的。我有点失望JPA没有给我一个以上的抽象,我想这不是我在使用不同数据库时遇到的唯一限制

现在来回答我的问题:例如,我在web2py中读到,所有表都必须更改为使用自动增量索引。它是否也支持序列生成器或标识列?其他web框架如何?它们是否允许我跨多个遗留数据库移植应用程序?也就是说,除了标识列和字符串的数据类型定义之间的细微差异外,表定义是相同的(我记得在那里修改了create语句,但我记不起到底需要什么)


在获取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。。。正在返回…
功能以一次性插入和获取