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

SQLAlchemyで生のSQLを実行する方法

    SQLAlchemyは、Pythonで構築されたSQLツールであり、高性能データベースを設計および管理するための強力な機能を開発者に提供します。

    SQLAlchemyの使用方法を簡単に説明してから、Pythonドメイン言語の快適さの中で生のSQLステートメントを実行する方法について詳しく説明します。

    SQLAlchemyの使用

    すべてのPythonライブラリと同様に、SQLAlchemyをインストールすることから始めます。インストールしたら、Pythonで楽しみを始めることができます。

    次に、sqlalchemyをインポートします 次に、いくつかのモジュールをインポートして、SQLAlchemyデータベースエンジンに簡単にアクセスできるようにします。

    import sqlalchemy
    from sqlalchemy import create_engine
    from sqlalchemy import Table, Column, Integer, String, MetaData, ForeignKey
    from sqlalchemy import inspect
    

    create_engineに加えて 、新しいテーブルを作成するために必要ないくつかの追加モジュールもインポートしています。ただし、その前に、.__version__を呼び出して、SQLAlchemyがインストールされ、インポートされ、機能していることを確認してください。 そのように:

    print sqlalchemy.__version__
    Out[*]: 1.0.9
    
    テーブルの作成

    SQL式言語であるSQLAlchemyの基本機能を使用して、metadataを作成します。 これには、新しいbookを定義する多数の関連モジュール(またはオブジェクト)が含まれます。 データベーステーブル:

    metadata = MetaData()
    books = Table('book', metadata,
      Column('id', Integer, primary_key=True),
      Column('title', String),
      Column('primary_author', String),
    )
    
    engine = create_engine('sqlite:///bookstore.db')
    metadata.create_all(engine)
    

    上部にmetadataを定義します 、次にそれをTable()に渡します メソッド。テーブルにbookという名前を付けます。 。この中で、データ型やprimary_keyなどの重要な属性とともに、各列を定義します。 。

    テーブルが定義され、metadataに関連付けられたら オブジェクトの場合、接続できるデータベースエンジンを作成する必要があります。これは、create_engineを使用して実行されます 機能。

    engine = create_engine('sqlite:///bookstore.db')
    

    この例では、単純なSQLiteを使用します データベース。 MySQLやPostgreSQLなどの他のエンジンの接続文字列を使用することもできます。 PostgreSQL用のエンジンを作成するための構文例は次のとおりです。

    engine = create_engine('postgresql://user:password@host/database')
    

    エンジンを作成したら、.create_all()を使用する必要があります。 metadataのメソッド オブジェクトを作成し、engineを渡します これに接続すると、上記のようにSQLAlchemyがテーブルを自動的に生成します。

    これで、適切と思われるテーブルを使用できます。この簡単な例では、inspectを使用します 列を表示し、テーブルが正常に作成されたことを確認するモジュール:

    inspector = inspect(engine)
    inspector.get_columns('book')
    Out[*]:
    [{'autoincrement': True,
      'default': None,
      'name': u'id',
      'nullable': False,
      'primary_key': 1,
      'type': INTEGER()},
     {'autoincrement': True,
      'default': None,
      'name': u'title',
      'nullable': True,
      'primary_key': 0,
      'type': VARCHAR()},
     {'autoincrement': True,
      'default': None,
      'name': u'primary_author',
      'nullable': True,
      'primary_key': 0,
      'type': VARCHAR()}]
    

    案の定、.get_columns()を使用します bookのメソッド 表を見ると、3つの列が生成されていることがわかります。

    SQLステートメントの実行

    基本が整ったら、SQLAlchemyを使用して生のSQLを実行してみることができます。

    テキストモジュールの使用

    生のSQLを実行する1つの方法は、textを使用することです。 モジュール、またはTextual SQLtextを使用する最も読みやすい方法 モジュールをインポートし、engineに接続した後 、textを定義します .executeを使用する前のSQLステートメント文字列 実行するには:

    from sqlalchemy.sql import text
    with engine.connect() as con:
    
        data = ( { "id": 1, "title": "The Hobbit", "primary_author": "Tolkien" },
                 { "id": 2, "title": "The Silmarillion", "primary_author": "Tolkien" },
        )
    
        statement = text("""INSERT INTO book(id, title, primary_author) VALUES(:id, :title, :primary_author)""")
    
        for line in data:
            con.execute(statement, **line)
    

    ここでは、text()を使用して、2つのレコードをデータベースに挿入しています。 -定義されたステートメント。

    実行メソッドの使用

    別の方法は、text()の使用をスキップすることです。 生のSQL文字列を.execute()に渡します 方法。たとえば、ここでは.execute()を使用します 上に挿入した新しいレコードを表示するには:

    with engine.connect() as con:
    
        rs = con.execute('SELECT * FROM book')
    
        for row in rs:
            print row
    
    Out[*]:
    (4, u'The Hobbit', u'Tolkien')
    (5, u'The Silmarillion', u'Tolkien')
    

    あります! SQLAlchemyで生のSQLステートメントを実行するためのシンプルで効果的なメソッド。


    1. 変異テーブルの回避策としてのOracle

    2. psql:致命的:ロールpostgresは存在しません

    3. データベースクエリとは何ですか?

    4. 誰もが知っておくべきOracle待機イベント