SQLITE - Insert ze zmiennymi

SQLITE - Insert ze zmiennymi
PA
  • Rejestracja:około 18 lat
  • Ostatnio:ponad rok
  • Postów:73
0

Witam wszystkich

Musze wrzucic do bazy danych w sqqlite, trzy wartosci i nie mam pojecia, gdzie jest problem. Za kazdym razem wywala informacje, ze wartosc powinna byc string, ale nie wiem, o co mu ddokladnie chodzi i o ktora wartosc. Wywala się przy komendzie execute. Majstruje juz różne kombinacje, ale nie działają

Kopiuj
ValueError: operator parameter must be str
Kopiuj
sql_create_queue_table = """ CREATE TABLE IF NOT EXISTS queue (
                                             id INT PRIMARY KEY AUTOINCREMENT,
                                             added REAL,
                                             tag1 TEXT,
                                             tag2 TEXT
                                         ); """


 sql = """INSERT INTO queue(added, tag1, tag2) VALUES(?, ?, ?)""", [added, tag1, tag2]


cur = self.conn.cursor()
cur.execute(sql)
edytowany 1x, ostatnio: Paweleczek
ledi12
  • Rejestracja:prawie 6 lat
  • Ostatnio:około 2 miesiące
  • Lokalizacja:Wrocław
2
Kopiuj
 sql = "INSERT INTO queue VALUES(?, ?, ?)", (added, tag1, tag2,)

Robię http response status cody w martwych ciągach
edytowany 2x, ostatnio: ledi12
PA
  • Rejestracja:około 18 lat
  • Ostatnio:ponad rok
  • Postów:73
0

Ale skad wiadomo, w ktore pola wstawic? Z tego co znam sql, to taki zapis oznacza, ze trzeba wstawic wszystkie 4 wartosci, w tym pole id, ale jest podane tylko 3 wartosci.
A te wartosci added, tag1, tag2, to sa zmienne, czy cos innego?

ledi12
ID sie autoinkrementuje (Masz nawet to w zapisie). Kolejnosc zalezy od kolejnosci zmiennych w nawiasie (tak, to zmienne)
abrakadaber
abrakadaber
nieprawda - jak tabela ma 4 pola i nie wyszczególnisz pól w insercie to musisz podać CZTERY wartości, nieważne, że podane id zostanie zignorowane
abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:8 miesięcy
  • Postów:6610
4

zacznij od tego, żeby zamiast sparametryzowanego zapytania uruchomić zwykłe, np. takie INSERT INTO queue(added, tag1, tag2) VALUES(1.2, 'aaa', 'bbb') jak Ci to zadziała to będziemy dalej patrzeć :)


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
PA
  • Rejestracja:około 18 lat
  • Ostatnio:ponad rok
  • Postów:73
0

Dzięki. O tym samym pomyślałem wczoraj i tak zrobiłem. Było trochę zabawy z tymi plusami miedzy zmiennymi, ale się udało i taki zapis działa. Zabawne jest to, że tego drugiego zapisu praktycznie nie sposób znaleźć w necie i wszyscy pokazują ten pierwszy.

jurek1980
  • Rejestracja:ponad 8 lat
  • Ostatnio:4 minuty
  • Postów:3502
3

To czego używałeś to prepared statements i nie powinno być zastępowane na stałe przez zapytania ze złączeń stringów bo omijasz mechanizmy zabezpieczające przed SQL Injection.
Jeśli zrobiłeś już testowo przez złączenia stringów to teraz zobacz czy uda Ci się to przerobić na pierwszą metodę. Wiesz już jak powinno to wyglądać.

PA
  • Rejestracja:około 18 lat
  • Ostatnio:ponad rok
  • Postów:73
0

Poprzedni przykład zrobiłem bez parametrów, tylko w formie zwykłego zapytania SQL, ale przy kolejnym skrypcie znowu natrafiłem na ten problem i udało mi sie rozwiązać, choć nie tak jak chciałem.

Na początku próbowałem zaapisać zapytanie do zmiennej sql i dopiero przekazać do execute, ale ciągle marudził, więc postanowiłem zaapytanie bezpośrednio wrzucić do komendy execute i poszło.

c.execute("INSERT INTO logi(opis, date_time, operation, direction, protocol, dst_port, src_ip) VALUES(?, ?, ?, ?, ?, ?, ?)", ["opis", 1.1, "operation", "direction", "protocol", 1, "src_ip"])

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.