sql >> Database teknologi >  >> RDS >> PostgreSQL

Udarbejdet erklæring om Postgresql in Rails

Hvis du vil bruge prepare sådan bliver du nødt til at foretage et par ændringer:

  1. PostgreSQL-driveren ønsker at se nummererede pladsholdere ($1 , $2 , ...) ikke spørgsmålstegn, og du skal give dit forberedte udsagn et navn:

     ActiveRecord::Base.connection.raw_connection.prepare('some_name', "DELETE FROM my_table WHERE id = $1")
    
  2. Opkaldssekvensen er prepare efterfulgt af 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 ])
    

Ovenstående tilgang fungerer for mig med ActiveRecord og PostgreSQL, din PG::Connection.open version skulle fungere, hvis du opretter forbindelse korrekt.

En anden måde er at lave citatet selv:

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

Det er den slags ting, ActiveRecord normalt laver bag din ryg.

Direkte interaktion med databasen har en tendens til at være lidt af et rod med Rails, da Rails-folkene ikke synes, du nogensinde skal gøre det.

Hvis du virkelig bare prøver at slette en række uden forstyrrelser, kan du bruge delete :

delete()

[...]

Rækken fjernes simpelthen med en SQL DELETE sætning på postens primære nøgle, og ingen tilbagekald udføres.

Så du kan bare sige dette:

MyTable.delete(id)

og du sender en simpel delete from my_tables where id = ... ind i databasen.




  1. De 9 mest almindelige databasedesignfejl

  2. Med sqlalchemy hvordan man dynamisk binder til databasemotoren på en per-anmodningsbasis

  3. Hvordan tilføjer man en ny kolonne i en tabel efter 2. eller 3. kolonne i tabellen ved hjælp af postgres?

  4. Sådan får du en liste over primær nøglebegrænsning fra alle databaser på SQL Server Instance - SQL Server / TSQL Tutorial Del 60