no such column — DedSec Project
SQLite: no such column — έλεγχος πραγματικού σχήματος και aliases Περιβάλλον: SQLite, κατά την προετοιμασία ή εκτέλεση SQL. Ακριβές νόημα Η SQLite δεν βρίσκει μια στήλη που να είναι ορατή…
SQLite: no such column — έλεγχος πραγματικού σχήματος και aliases
Περιβάλλον: SQLite, κατά την προετοιμασία ή εκτέλεση SQL.
Ακριβές νόημα
Η SQLite δεν βρίσκει μια στήλη που να είναι ορατή στο σημείο του ερωτήματος. Μπορεί να φταίει λανθασμένο όνομα, παλιά έκδοση πίνακα, alias εκτός εμβέλειας ή σύνδεση σε διαφορετικό αρχείο βάσης. Πριν αλλάξεις σχήμα, επιθεώρησε τη βάση που ανοίγει πραγματικά η εφαρμογή.
Τοπικό πείραμα χωρίς αρχεία
Άνοιξε sqlite3 :memory: και πληκτρολόγησε:
CREATE TABLE tasks (id INTEGER PRIMARY KEY, title TEXT NOT NULL);
INSERT INTO tasks (title) VALUES ('review');
SELECT status FROM tasks; -- Error: no such column: status
PRAGMA table_info(tasks);
SELECT title FROM tasks; -- review
Η έξοδος του PRAGMA δείχνει id και title, όχι status. Το SELECT t.title FROM tasks AS t; είναι σωστή αναφορά με alias. Αν το t δεν ορίζεται στο FROM ή JOIN, έλεγξε τη δομή του query.
Διαδικασία διάγνωσης
- Κατέγραψε το ακριβές SQL χωρίς να αποθηκεύσεις ευαίσθητες τιμές, καθώς και ποιο αρχείο SQLite χρησιμοποιείται. Ίδια ονόματα σε άλλους φακέλους δεν δείχνουν την ίδια βάση.
- Κάνε αρχικά μόνο ανάγνωση:
PRAGMA database_list;,PRAGMA table_info(tasks);ήSELECT sql FROM sqlite_schema WHERE name='tasks';. - Σύγκρινε το live schema με τα versioned migrations. Δοκίμασε αλλαγές σε αντίγραφο πριν πειράξεις πραγματικά δεδομένα.
- Διόρθωσε query όταν είναι λάθος το όνομα. Αν χρειάζεται νέα στήλη, ετοίμασε ελεγχόμενο migration με backup και rollback.
- Δοκίμασε τόσο φρέσκια βάση όσο και παλιότερο σχήμα ώστε να εντοπίσεις προβλήματα αναβάθμισης.
Συχνό λάθος
Μη βασίζεσαι στην παλιά ανεκτική συμπεριφορά των διπλών εισαγωγικών της SQLite για strings. Οι placeholders προστατεύουν τιμές, όχι ονόματα στηλών: για δυναμικό SQL διάλεξε αναγνωριστικά από σταθερή λίστα επιτρεπόμενων επιλογών.