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

SQLAlchemyはMySQLのテキストにどの列タイプを使用しますか?

    SQLAlchemyはLONG​​TEXTをサポートしているようです:

    $ python
    Python 2.7.13 (default, Sep 29 2017, 15:31:18) 
    [GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.37)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> from sqlalchemy.dialects.mysql import LONGTEXT
    >>> 
    

    ベンダー固有のタイプの使用方法については、こちらをご覧ください: http ://docs.sqlalchemy.org/en/latest/core/type_basics.html#vendor-specific-types

    価値のあることとして、完全にブランドに中立なデータベースレイヤーを開発しようとすることは困難であり、努力する価値があることはめったにありません。私は数年前にZendFramework1.0に取り組み、そのフレームワークでサポートされているすべてのSQLデータベース用の汎用単体テストスイートを作成しようとしました。すべてのデータ型がANSI/ISO SQL標準をサポートしていると主張しているにもかかわらず、SQLのすべての実装で同じ方法でサポートされているデータ型はほとんどないことがわかりました。

    最終的には、データレイヤー用に独自のクラス階層を開発し、データベース固有のアダプターごとにコードを少し異なる方法で実装する必要があります。

    更新:ニュースは私たちが思っているよりも良いと思います。このテストを試しました:

    t2 = Table('t2', metadata,
          Column('id', Integer, primary_key=True),
          Column('t1', String(64000)),
          Column('t2', String(16000000)),
          Column('t3', String(4294000000)),
          Column('t4', Text)
         )
    
    metadata.create_all(engine)
    

    次に、MySQLデータベースに何が作成されたかを確認しました:

    mysql> show create table t2;
    
    CREATE TABLE `t2` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `t1` mediumtext,
      `t2` longtext,
      `t3` longtext,
      `t4` text,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
    

    したがって、SQLAlchemyの一般的なStringをマップします データ型を多かれ少なかれ適切なMySQLデータ型に変換します。

    予想よりも大きなデータ型を使用していたことは、私にとって驚くことではありません。 MEDIUMTEXT バイトで16MBをサポート 、文字ではありません 。私のデフォルトの文字セットはマルチバイトのutfmb4であるため、MEDIUMTEXTの最大長 実際には2^24文字よりはるかに少ないです。そのため、LONGTEXTにアップグレードする必要がありました 。もちろん、2^32文字はLONGTEXTに収まりません どちらかですが、SQLAlchemyはとにかく列を作成するつもりであると想定しているようです。

    完全に実装中立のコードを実行するのはまだ難しいと思います。たとえば、ストレージエンジンのテーブルオプションなどのMySQL機能や、一般的な同等の機能がない特定のデータ型(ENUMなど)を使用する場合はどうでしょうか。 )?



    1. WordPressブログをCodeIgniterビューにリンクする

    2. 警告:mysqli_connect():MySQLサーバーがなくなりました

    3. MySQLを使用して、特定の1行のクエリ結果ランクを選択するにはどうすればよいですか?

    4. SQLServerデータベースの破損の原因と解決策を調べる