2016-04-13 2 views
0

Ich migriere von SQLite zu MySQL und muss Indizes für Spalten in meiner Datenbank erstellen. Ärgerlicherweise verfügt mySQL nicht über die Funktion CREATE INDEX IF NOT EXISTS. Also habe ich mich gefragt, ob ich einfach einen neuen Index erstellen könnte, wenn die Tabelle selbst von web2py erstellt wird und nicht zu einem anderen Zeitpunkt. Aber wo im Code stelle ich eine Routine, die nur aufgerufen wird, wenn web2py 'create table' aufruft?Web2py: wie man einen Anruf eine Funktion bei der Tabellenerstellung anruft

Antwort

1

Die web2py-API enthält keine Möglichkeit festzustellen, ob eine bestimmte Tabelle gerade als Teil der aktuellen Anforderung erstellt wurde (wenn Migrationen aktiviert sind, wird die Tabelle bei der ersten Anforderung erstellt und andernfalls wird sie angenommen Die Tabelle existiert bereits). Wenn eine Tabelle in der Datenbank über den web2py-Migrationsmechanismus erstellt wird, wird eine * .table-Datei im Ordner/data der Anwendung erstellt. Um festzustellen, ob eine Tabelle nur erstellt wurde, müssten Sie feststellen, dass keine * .table-Datei existiert, bevor db.define_table aufgerufen wird, und dass die * .table-Datei gleich danach existiert. Wahrscheinlich möchten Sie dies nicht bei jeder Anfrage tun, daher sollten Sie die Indexerstellung einfach außerhalb der Anwendung durchführen.

Ein besserer Ansatz wäre wahrscheinlich, das SQL manuell zu generieren, um zu überprüfen, ob der Index existiert, aber das wiederum sollte bei jeder Anfrage in der Produktion vermieden werden.

Hinweis, es gibt Diskussionen über das Hinzufügen von Indexerstellungsfunktionen zum DAL, aber es ist noch nicht da.

Verwandte Themen