Infoga en enskild rad
Det finns flera sätt att utföra en infogning med SQLAlchemy, men här fokuserar vi på det som följer samma mönster som select-uttrycket.
Det använder ett insert-uttryck där du anger tabellen som argument och tillhandahåller den data du vill infoga via metoden .values() som nyckelordsargument. Om my_table till exempel innehåller kolumnerna my_col_1 och my_col_2, skapar insert(my_table).values(my_col_1=5, my_col_2="Example") en rad i my_table där värdet i my_col_1 är 5 och värdet i my_col_2 är "Example".
Lägg märke till skillnaden i syntax: när du lägger till ett where-uttryck till ett befintligt uttryck inkluderar du tabellnamnet tillsammans med kolumnnamnet, till exempel new_stmt = old_stmt.where(my_tbl.columns.my_col == 15). Detta behövs eftersom det befintliga uttrycket kan involvera flera tabeller.
Däremot kan du bara infoga en post i en enda tabell med insert, så du behöver inte inkludera tabellnamnet när du använder values(), t.ex. stmt = insert(my_table).values(my_col = 10).
Här är tabellens namn data. Du kan köra repr(data) i konsolen för att undersöka tabellens struktur.
Den här övningen är en del av kursen
Introduktion till databaser i Python
Övningsinstruktioner
- Importera
insertochselectfrån modulensqlalchemy. - Bygg ett insert-uttryck
insert_stmtför tabellendatasom sätternametill'Anna',counttill1,amounttill1000.00ochvalidtillTrue. - Kör
insert_stmtmedconnectionoch lagraresults. - Skriv ut attributet
.rowcountförresultsför att se hur många poster som infogades. - Bygg ett select-uttryck som hämtar posten i
datadärnameär'Anna'. - Kör lösningen för att skriva ut resultatet av select-uttrycket.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
# Import insert and select from sqlalchemy
from sqlalchemy import ____, ____
# Build an insert statement to insert a record into the data table: insert_stmt
insert_stmt = insert(____).values(name=____, ____, ____, ____)
# Execute the insert statement via the connection: results
results = connection.execute(____)
# Print result rowcount
print(____)
# Build a select statement to validate the insert: select_stmt
select_stmt = select([data]).where(____ == ____)
# Print the result of executing the query.
print(connection.execute(select_stmt).first())