我使用Django与现有的Oracle数据库(即,其中表不是由Django创建的)。所以在我的模型中,我不得不通过在Meta类中为db_table指定一个值来指定表名。由于我希望访问的表属于不同于我拥有凭据的用户,因此我遇到了问题。我有权查看这些表格(在SQL Developer中没有麻烦)。能否阻止Django截断长表名?
当Oracle表的名称超过30个字节时,Django会截断名称的最后四个字节,并将其替换为表名剩余部分的可重复4字节散列。这对Django自己创建的表格非常有用。对于访问现有数据库中的表而言,这通常也不会成为问题(正如我的情况),因为Oracle本身将名称限制为30个字节。
的问题是,Django不具有用于指出的是,表属于另一个用户单独的设施。所以我用点语法的解决方法(由只设置db_table为,例如,“USERNAME.MY_29_BYTE_TABLE_NAMEXXXXXXXX”),但由于这导致整体表名超过30个字节,Django的做它截断伎俩,并试图对查询一个不存在的表名。
是否有办法防止这种行为,或以不同的方式来指定用户从表的名称分开?
这听起来像它可能是在Django合法的错误!你应该看看是否有在https://code.djangoproject.com/query相关的任何东西,添加一个新的机票如果不。 – SingleNegationElimination
考虑一个登录触发器,做和ALTER SESSION SET CURRENT_SCHEMA,而不是指定所有者为每个表 –
很好的建议,无论是。如果我的理解正确,Gary的想法只有在你想访问的所有表都属于同一个用户时才有效。虽然对我来说就是这样,但对于其他情况,下面SuperDuper建议的解决方案可能更有用。谢谢! –