我正在开发Python应用程序,它在开发环境中使用MySQL作为数据库后端,在生产环境中使用Oracle11g。是否有一种特定的方法来统一SQLAlchemy文本字段,以便它们同时在MySQL和Oracle数据库上工作?对于模型中的Oracle后端,我使用sqlalchemy.CLOB和MySQL sqlalchemy.TEXT。
发布于 2016-04-08 12:22:38
根据#sqlalchemy上的@agronholm,人们应该使用通用的SQLAlchemy类型Text ( TEXT是专门化的):
可变大小的字符串类型。 在SQL中,通常对应于CLOB或文本。还可以使用Python对象并以bind (以及结果集的反向编码)对数据库的编码进行编码。一般来说,TEXT对象没有长度;虽然有些数据库将在这里接受length参数,但其他数据库将拒绝它。
发布于 2016-04-08 18:21:54
我认为使用这个正式的文档技巧应该能做到这一点:反式编译。在本例中,我将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,以避免这些问题和其他问题。
https://stackoverflow.com/questions/20378389
复制相似问题