我使用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建議的解決方案可能更有用。謝謝! –