Wstawianie pojedynczego wiersza
Istnieje kilka sposobów wykonania operacji INSERT w SQLAlchemy. Skupimy się na podejściu, które nawiązuje do wzorca stosowanego przy instrukcji select.
Polega ono na użyciu instrukcji insert, w której podajesz tabelę jako argument, a dane do wstawienia przekazujesz przez metodę .values() jako argumenty kluczowe. Na przykład, jeśli tabela my_table zawiera kolumny my_col_1 i my_col_2, to insert(my_table).values(my_col_1=5, my_col_2="Example") utworzy w my_table wiersz z wartością 5 w kolumnie my_col_1 oraz wartością "Example" w kolumnie my_col_2.
Zwróć uwagę na różnicę w składni: gdy dołączasz klauzulę where do istniejącej instrukcji, musisz podać nazwę tabeli i nazwę kolumny, na przykład new_stmt = old_stmt.where(my_tbl.columns.my_col == 15). Jest to konieczne, ponieważ istniejąca instrukcja może dotyczyć kilku tabel.
Natomiast operacja insert zawsze dotyczy tylko jednej tabeli, dlatego przy użyciu values() nie musisz podawać nazwy tabeli, np. stmt = insert(my_table).values(my_col = 10).
W tym ćwiczeniu tabela nosi nazwę data. Możesz uruchomić repr(data) w konsoli, aby sprawdzić strukturę tej tabeli.
To ćwiczenie jest częścią kursu
Wprowadzenie do baz danych w Pythonie
Instrukcje do ćwiczenia
- Zaimportuj
insertiselectz modułusqlalchemy. - Utwórz instrukcję INSERT
insert_stmtdla tabelidata, ustawiając:namena'Anna',countna1,amountna1000.00orazvalidnaTrue. - Wykonaj
insert_stmtprzy użyciuconnectioni zapisz wynik w zmiennejresults. - Wyświetl atrybut
.rowcountobiekturesults, aby sprawdzić, ile rekordów zostało wstawionych. - Utwórz instrukcję SELECT, która pobierze z tabeli
datarekord onamerównym'Anna'. - Uruchom rozwiązanie, aby wyświetlić wyniki wykonania instrukcji SELECT.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
# 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())