sql >> データベース >  >> RDS >> Mysql

複合主キーを持つレガシー読み取り専用データベーステーブルでDjangoを使用するにはどうすればよいですか?

    次に、従来のREADONLYデータベースについて話しているので、複数列のPKを使用せずに外部スキーマ(ビュー)を作成できる可能性があります。たとえば、フィールドキーを連結できます。ここと例:

    例:

    テーブル:

    create table A (
      a1 int not null,
      a2 int not null,
      t1 varchar(100),
      primary key (a1, a2)
    )
    
    create table B (
      b1 int not null,
      b2 int not null,
      a1 int not null,
      a2 int not null,
      t1 varchar(100),
      primary key (b1, b2),
      constraint b_2_a foreign key (a1,a2) 
      references A (a1, a2)
    )
    

    djangoが読み取る外部スキーマ:

    Create view vA as 
    select 
       a1* 1000000 + a2 as a, A.* 
    from A
    
    Create view vB as 
    select 
       b1* 1000000 + b2 as b, 
       a1* 1000000 + a2 as a, B.* 
    from B
    

    djangoモデル:

    class A(models.Model):
        a = models.IntegerField(  primary_key=True )
        a1 = ...
        class Meta(CommonInfo.Meta):
            db_table = 'vA'    
    
    class B(models.Model):
        b = models.IntegerField(  primary_key=True )
        b1 = ...
        a = models.ForeignKey( A )
        a1 = ...
        class Meta(CommonInfo.Meta):
            db_table = 'vB'    
    

    テクニックを改良してvarcharキーを作成し、インデックスを操作できるようにすることができます。 。あなたのデータベースのブランドがわからないので、これ以上サンプルを書きません。

    詳細情報:

    Do Djangoモデルは複数列の主キーをサポートしていますか?

    チケット373

    代替メソッド




    1. 1回のクエリで2つのテーブルをクエリする

    2. SQLiteの文字列に改行を挿入する2つの方法

    3. mysqlテーブルの列名に許可されていない文字リストはありますか?

    4. PHPとMySQLでタイムゾーンを設定する