Chcę, aby 3 kolumny miały 9 różnych wartości, takich jak lista w Pythonie. Czy to możliwe? Jeśli nie w SQLite, to w innym silniku bazy danych?Czy można zapisać listę wartości w kolumnie SQLite?
Odpowiedz
Musisz serializować listę (lub inny obiekt Pythona) do ciągu bajtów, zwanego również "BLOB" ;-), za pomocą swoich ulubionych środków (marshal
jest dobre dla list wartości elementarnych, takich jak liczby lub ciągi znaków & c, cPickle
jeśli chcesz bardzo ogólne rozwiązanie, itp.) I deserializować go po jego pobraniu. Oczywiście, że w zasadzie prowadzi listę (lub inny obiekt Pythona) jako bierny „ładunek” - nie można sensownie wykorzystać w WHERE
klauzulami, ORDER BY
itp
Relacyjne bazy danych po prostu nie radzą sobie zbyt dobrze z wartościami nieatomowymi i wolałby inne, znormalizowane alternatywy (przechowuj pozycje listy w innej tabeli, która zawiera kolumnę "identyfikator_pliku", wstaw "identyfikator_pliku" w głównej tabeli, itd.). Nie-relacyjne bazy danych, chociaż mają zwykle ograniczenia relacyjne (np. Brak sprzężeń), mogą oferować bardziej bezpośrednie wsparcie dla twoich wymagań.
Niektóre relacyjne bazy danych mają nierelacyjne rozszerzenia. Na przykład PostGreSQL obsługuje typ danych array (nie tak ogólny, jak listy Pythona - tablice PgSQL są wewnętrznie jednorodne).
Zasadniczo robi się to poprzez uszeregowanie listy (za pomocą repr()), a następnie zapisanie ciągu znaków. Po odczytaniu łańcucha z bazy danych użyj eval(), aby ponownie utworzyć listę. Zachowaj ostrożność, chociaż masz pewność, że żadne dane generowane przez użytkowników nie trafią do kolumny lub eval() jest zagrożeniem bezpieczeństwa.
Twoje pytanie jest trudne do zrozumienia. Tutaj znowu:
Chcę, aby 3 kolumny miały 9 różnych wartości, takich jak lista w Pythonie. Czy to możliwe? Jeśli nie w SQLite, to w innym silniku bazy danych?
Oto, co moim zdaniem zadajesz: czy możliwe jest pobranie listy 9 różnych wartości w Pythonie i zapisanie wartości pod konkretną kolumną w bazie danych?
Odpowiedź na to pytanie brzmi "tak". Proponuję użyć biblioteki Python ORM zamiast próbować samodzielnie napisać kod SQL. Ten przykładowy kod wykorzystuje Autumn:
import autumn
import autumn.util
from autumn.util import create_table
# get a database connection object
my_test_db = autumn.util.AutoConn("my_test.db")
# code to create the database table
_create_sql = """\
DROP TABLE IF EXISTS mytest;
CREATE TABLE mytest (
id INTEGER PRIMARY KEY AUTOINCREMENT,
value INTEGER NOT NULL,
UNIQUE(value)
);"""
# create the table, dropping any previous table of same name
create_table(my_test_db, _create_sql)
# create ORM class; Autumn introspects the database to find out columns
class MyTest(autumn.model.Model):
db = my_test_db
lst = [3, 6, 9, 2, 4, 8, 1, 5, 7] # list of 9 unique values
for n in lst:
row = MyTest(value=n) # create MyTest() row instance with value initialized
row.save() # write the data to the database
uruchomić ten kod, a następnie zamknąć i uruchomić Pythona sqlite3 my_test.db
. Następnie należy uruchomić polecenie SQL wewnątrz SQLite: select * from mytest;
Oto wynik:
1|3
2|6
3|9
4|2
5|4
6|8
7|1
8|5
9|7
Przykład ten ciągnie wartości z jednej listy i używa wartości, aby wypełnić jedną kolumnę z bazy danych. Można go trywialnie rozszerzyć, dodając dodatkowe kolumny i wypełniając je również.
Jeśli nie jest to odpowiedź, której szukasz, proszę ponownie sformułować swoją prośbę w celu wyjaśnienia.
P.S. W tym przykładzie użyto autumn.util
. Numer setup.py
dołączony do aktualnej wersji Jesieni nie instaluje się w odpowiednim miejscu na util.py
; będziesz musiał ukończyć konfigurację jesieni ręcznie.
Można użyć bardziej dojrzałej metody ORM, takiej jak SQLAlchemy lub ORM z Django. Jednak naprawdę lubię jesień, szczególnie w przypadku SQLite.
- 1. Czy można przyciąć wszystkie wartości w kolumnie w pojedynczej instrukcji?
- 2. Jak mogę zapisać listę właściwości (nie ich wartości)?
- 3. Czy można zapisać tablicę w TQueue?
- 4. Czy można zapisać typowe elementy w VHDL?
- 5. SQL- Dodaj wartości w kolumnie
- 6. Zaktualizuj wartości w kolumnie tożsamości
- 7. Dlaczego nie można zapisać wartości ujemnej w zmiennej bajtowej?
- 8. Czy można utworzyć listę zasobów w Xaml?
- 9. Jak zapisać tablicę javascript jako listę redis
- 10. Czy można plunker zapisać na github?
- 11. SQLite Wybierz DISTINCT Wartości kolumny bez zamawiania
- 12. Czy są jakieś wartości w tym SQLite w VCS
- 13. Sprawdź, czy ciąg zawiera listę podciągów i zapisać Dopasowany ones
- 14. Czy można mieć zdalną bazę danych sqlite?
- 15. Jak wyświetlić wartości enum w kolumnie DataGridView
- 16. mysql zmień wszystkie wartości w kolumnie
- 17. Jak napisać listę posortowaną leksykograficznie w siatce wyszczególnionej w kolumnie?
- 18. Warunkowo zastępując wartości na podstawie wartości w innej kolumnie
- 19. Jak zapisać listę <string> w ustawieniach. Domyślnie?
- 20. Jak zmienić wartość w kolumnie bazy danych SQLite?
- 21. Zapytanie SQLite zgodne z ciągiem tekstowym w kolumnie
- 22. jak dodać wartości jako wartości kumulatywne w oddzielnej kolumnie?
- 23. Wartości sum w kolumnie na podstawie daty
- 24. Wstawianie wielu wartości w jednej kolumnie mysql?
- 25. pozycja Oktawa maksymalnej wartości w kolumnie
- 26. Jak liczyć liczbę wartości numerycznych w kolumnie
- 27. Policz liczbę wartości zerowych w każdej kolumnie
- 28. mysql przyłączyć wielu wartości w jednej kolumnie
- 29. R - dopasowanie jednej wartości przez połączenie wartości w kolumnie
- 30. Czy jest możliwe wyświetlanie wartości toString() w kolumnie wartości w debugerze Eclipse?
dzięki.Myślę, że przeprojektuję moją bazę danych, aby mieć oddzielną tabelę, ponieważ potrzebuję móc użyć wartości w klauzuli "WHERE". – john2x