Fehler 1054, “Unbekannte Spalte 'student_info.id' in 'field list'" - Django
Hatte ich eine bestehende Datenbank mit einer bestimmten Tabelle, welche enthalten ist in 5 Spalten und eine Menge Daten. (Ich importierte diese aus dem CSV-Format)
Wenn ich ausführen, BESCHREIBEN student_info in MySql, es zeigt:
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| pic_id | int(11) | YES | | NULL | |
| name | varchar(50) | YES | | NULL | |
| hostel | varchar(3) | YES | | NULL | |
| room | int(11) | YES | | NULL | |
| branch | varchar(4) | YES | | NULL | |
| id_no | varchar(12) | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
Diese Tabelle hat alle Daten, ich habe es getestet, indem verschiedene SELECT-Anweisungen und über Workbench
In settings.py konfigurierte ich mein Projekt, um mit zu verbinden, dass die Datenbank erfolgreich.
Dann gab ich den Befehl
python manage.py inspectdb > studentinfo/models.py
Sowie der Inhalt von models.py wurde:
class StudentInfo(models.Model):
pic_id = models.IntegerField(null=True, blank=True)
name = models.CharField(max_length=150, blank=True)
hostel = models.CharField(max_length=9, blank=True)
room = models.IntegerField(null=True, blank=True)
branch = models.CharField(max_length=12, blank=True)
id_no = models.CharField(max_length=36, blank=True)
class Meta:
db_table = u'student_info'
Dann, wenn ich diese ausführen nach syncdb:
python manage.py sqlall studentinfo
BEGIN;
CREATE TABLE `student_info` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`pic_id` integer,
`name` varchar(150) NOT NULL,
`hostel` varchar(9) NOT NULL,
`room` integer,
`branch` varchar(12) NOT NULL,
`id_no` varchar(36) NOT NULL
)
;
COMMIT;
So scheint alles in Ordnung zu sein, außer dass ich immer diesen Fehler wenn ich versuche zu retreive nichts:
>>> from studentinfo.models import StudentInfo
>>> list=StudentInfo.objects.all()
>>> list
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/usr/lib/python2.7/dist-packages/django/db/models/query.py", line 69, in __repr__
data = list(self[:REPR_OUTPUT_SIZE + 1])
File "/usr/lib/python2.7/dist-packages/django/db/models/query.py", line 84, in __len__
self._result_cache.extend(self._iter)
File "/usr/lib/python2.7/dist-packages/django/db/models/query.py", line 273, in iterator
for row in compiler.results_iter():
File "/usr/lib/python2.7/dist-packages/django/db/models/sql/compiler.py", line 680, in results_iter
for rows in self.execute_sql(MULTI):
File "/usr/lib/python2.7/dist-packages/django/db/models/sql/compiler.py", line 735, in execute_sql
cursor.execute(sql, params)
File "/usr/lib/python2.7/dist-packages/django/db/backends/util.py", line 34, in execute
return self.cursor.execute(sql, params)
File "/usr/lib/python2.7/dist-packages/django/db/backends/mysql/base.py", line 86, in execute
return self.cursor.execute(query, args)
File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 174, in execute
self.errorhandler(self, exc, value)
File "/usr/lib/python2.7/dist-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
raise errorclass, errorvalue
**OperationalError: (1054, "Unknown column 'student_info.id' in 'field list'")**
Jede Idee, was könnte die Ursache sein?
- ALTER TABLE
student_info
HINZUFÜGENid
integer AUTO_INCREMENT not NULL PRIMARY KEY
Du musst angemeldet sein, um einen Kommentar abzugeben.
sqlall
zeigt nur, was würde dann angelegt werden, wenn Sie ausgeführt wurden, syncdb mit einer leeren Datenbank. Als ist offensichtlich von IhremDESCRIBE
gibt es keineid
Feld - in der Tat kein Primärschlüssel an alle, die eine sehr seltsame Konstruktion. Sie müssen fügen Sie das Feld manuell via SQL.id
integer AUTO_INCREMENT not NULL PRIMARY KEY," zu. Ich denke, das problem könnte sein, dass da die Tabelle bereits erstellt ist, syncdb nicht erstellen Sie eine WEITERE Tabelle mit, dass die automatische Primärschlüssel. Aber da ich die bereits vorhandenen Daten in meine Tabelle, ich weiß nicht, wie man das umgehen kann.ALTER TABLE
Aussagen.Ich hatte die gleiche situation, Sie arbeiten mit einer bestehenden Datenbank.
Das problem ist, dass ein Vanille-queryset, werden versuchen zu Holen, die id, das Modell zu bauen-Objekt. Was ich am Ende Tat, ist die Abfrage verwenden .Werte(). So, es ist kein Modell bauen, und keine id.
.values_list()