跨数据库SQLAlchemy应用程序的通用TEXT / CLOB数据类型

时间:2013-12-04 14:48:36

标签: python database sqlalchemy

我正在开发Python Web应用程序,它使用MySQL作为开发环境的数据库后端和生产环境中的Oracle 11g。是否有一种特定的方法来统一SQLAlchemy文本字段,以便它们在MySQL和Oracle数据库上都可以工作?对于模型中的Oracle后端,我使用sqlalchemy.CLOB和MySQL sqlalchemy.TEXT

2 个答案:

答案 0 :(得分:2)

根据@agronholm对#sqlalchemy的说法,应该使用通用SQLAlchemy类型TextTEXT是其专长):

  

可变大小的字符串类型。

     

在SQL中,通常对应于CLOB或TEXT。也可以拿Python   unicode对象并在bind params中编码为数据库的编码   (以及结果集的反转。)通常,TEXT对象不会   有一个长度;而一些数据库将接受长度参数   在这里,它会被其他人拒绝。

答案 1 :(得分:0)

我认为使用这个官方文档技巧应该可以解决问题:Overiding Type Compilation。在这种情况下,我将保留CLOB作为原始版本,因为它在生产中使用,并将应用mysql的编译:

from sqlalchemy.ext.compiler import compiles
from sqlalchemy.types import CLOB

@compiles(CLOB, "mysql")
def compile_binary_mysql(type_, compiler, **kw):
    return "TEXT"
    # @note: this will handle other parameter such as `length`
    # return compiler.visit_TEXT(type_, **kw)

请注意,强烈建议您使用相同的RDBMS进行生产/测试/开发,以避免出现这些问题和其他问题。