我正在开发Python Web应用程序,它使用MySQL作为开发环境的数据库后端和生产环境中的Oracle 11g。是否有一种特定的方法来统一SQLAlchemy文本字段,以便它们在MySQL和Oracle数据库上都可以工作?对于模型中的Oracle后端,我使用sqlalchemy.CLOB
和MySQL sqlalchemy.TEXT
。
答案 0 :(得分:2)
根据@agronholm对#sqlalchemy的说法,应该使用通用SQLAlchemy类型Text
(TEXT
是其专长):
可变大小的字符串类型。
在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进行生产/测试/开发,以避免出现这些问题和其他问题。