は私の問題の説明です:Python - 例外を発生させるかどうかここ
ので、同様に、私は、テーブル名の束を取り、彼らの前に接頭辞を配置するタスクを持っている:
PREFIX = 'foo_';
prefixed_tablename = "".join([PREFIX, tablename[:27]])
(テーブル名が30文字を超えてはなりません(いくつかのOracle DBの制限)、これは私が最初の27文字を取る理由です)。
これで、タブー名の最後の3文字だけが異なる場合は、重複したタブー名になることがあります。
私は一意のテーブル名を作成するためのいくつかのファンシーアルゴリズムを実装することができましたが、重複する名前を検出するだけで十分です。だから、私はそれらをセットに格納することを考えました。接頭語tablenameを作成する場合は、セットをチェックして、そのようなtablenameがすでに存在するかどうかを確認してください。
は今、本当の問題のために:重複が検出されてしまった場合
、私は私のスクリプトがエラーのいくつかの種類を示す、実行を停止する必要があります。 Javaでは、私は例外を発生させるだけですが、Pythonでこれが望ましい方法であるかどうかはわかりません。
例外を発生させるか、メッセージを出力して終了する必要がありますか?
.join([PREFIX、tablename])[:30] ';を実行した方が良いでしょう。プレフィックスの長さを変更すると(31文字の状況@agfが指摘されている点を除いて)、それは引き続き機能します。 – JasonFruit
また、 'name_limit = 30'を実行してから' '" .join([PREFIX、tablename])[:name_limit] 'を実行する方が良いでしょう。将来の世代は30の意味を疑問に思っていません。その制限を持たない別のDBバックエンド –
@Alexanderか、それとも正しく文書化してください。 – agf