sql >> Databáze >  >> RDS >> PostgreSQL

Připravené prohlášení o Postgresql in Rails

Pokud chcete použít prepare takto budete muset provést několik změn:

  1. Ovladač PostgreSQL chce vidět očíslované zástupné symboly ($1 , $2 , ...) nikoli otazníky a připravený výpis musíte pojmenovat:

     ActiveRecord::Base.connection.raw_connection.prepare('some_name', "DELETE FROM my_table WHERE id = $1")
    
  2. Volací sekvence je prepare následuje 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 ])
    

Výše uvedený přístup mi funguje s ActiveRecord a PostgreSQL, vaším PG::Connection.open verze by měla fungovat, pokud se správně připojujete.

Dalším způsobem je udělat citaci sami:

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

To je druh věcí, které ActiveRecord obvykle dělá za vašimi zády.

Přímá interakce s databází bývá u Rails trochu nepořádek, protože lidé z Rails si nemyslí, že byste to někdy měli dělat.

Pokud se opravdu pokoušíte smazat řádek bez rušení, můžete použít delete :

delete()

[...]

Řádek se jednoduše odstraní pomocí SQL DELETE příkaz na primárním klíči záznamu a neprovádějí se žádná zpětná volání.

Takže můžete říct toto:

MyTable.delete(id)

a odešlete jednoduché delete from my_tables where id = ... do databáze.




  1. Kdy je čas upgradovat na SQL?

  2. jak bezpečné jsou připravené výpisy CHOP

  3. Systém správy velkých databází:Návrh a architekt

  4. Fulltextové vyhledávání v MySQL:Hodný, zlý a ošklivý