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

RailsのPostgresqlに関するプリペアドステートメント

    prepareを使用する場合 その場合は、いくつか変更を加える必要があります:

    1. PostgreSQLドライバーは、番号付きのプレースホルダー($1)を確認したいと考えています。 、$2 、...)疑問符ではなく、準備したステートメントに名前を付ける必要があります:

       ActiveRecord::Base.connection.raw_connection.prepare('some_name', "DELETE FROM my_table WHERE id = $1")
      
    2. 呼び出しシーケンスはprepareです 続いてexec_prepared

      connection = ActiveRecord::Base.connection.raw_connection
      connection.prepare('some_name', "DELETE FROM my_table WHERE id = $1")
      st = connection.exec_prepared('some_name', [ id ])
      

    上記のアプローチは、ActiveRecordとPostgreSQL、つまりPG::Connection.openで機能します。 正しく接続していれば、バージョンは機能するはずです。

    もう1つの方法は、自分で見積もりを行うことです。

    conn = ActiveRecord::Base.connection
    conn.execute(%Q{
        delete from my_table
        where id = #{conn.quote(id)}
    })
    

    これは、ActiveRecordが通常あなたの後ろで行っているようなことです。

    Railsの人々はあなたがそれをすべきだとは思わないので、データベースと直接対話することはRailsを少し混乱させる傾向があります。

    本当に干渉なしに行を削除しようとしている場合は、deleteを使用できます。 :

    delete()

    [...]

    行はSQLDELETEで簡単に削除されます レコードの主キーに関するステートメントであり、コールバックは実行されません。

    だからあなたはこれを言うことができます:

    MyTable.delete(id)
    

    そして、単純なdelete from my_tables where id = ...を送信します。 データベースに。




    1. エクスクルーシブ!アクセスプログラムマネージャーのゲストミハルバーにご参加ください

    2. bbPress:それぞれの投稿への添付ファイルのマッピングを見つける方法

    3. 方法:mysql InnoDBストレージエンジンをクリーンアップしますか?

    4. Postgresqlデータベースにnullを許可しない列を追加するにはどうすればよいですか?