javascript - HTML/JS som gränssnitt till lokal SQLite-databas
Jag skriver en ganska enkel databasapplikation, som jag vill lagras lokalt (till skillnad från att slå upp en fjärrdatabas). Jag gillar HTML/Javascript för att designa gränssnitt, och de är plattformsoberoende (alla har en webbläsare!), så jag skulle verkligen vilja skriva en webbsida som frontend. Ingen klient/server-interaktion ska vara involverad - jag vill bara att användarna ska kunna interagera med databasen med hjälp av en webbläsare, istället för ett inbyggt program.
Men det enda sättet jag kan se för att få åtkomst till databaser från en webbläsare är att använda något som WebSQL eller IndexedDB. Båda dessa abstraherar dock bort processen att hantera själva databasen och lagrar den någonstans i användarinställningarna. Jag vill distribuera själva databasfilen tillsammans med appen.
Kort sagt: finns det ett sätt att använda HTML/Javascript för att ändra en lokal SQLite-databasfil? Eller är HTML inte verktyget jag borde använda för den här typen av applikation?
REDIGERA: möjligen relevant
Svar #1
Detta är vad jag har slutat med att göra:
Som refererat här kan du använda Python för att skapa en lokal webbserver. Denna handledning ger en grundläggande infrastruktur för serverhanteraren. Jag var tvungen att hantera vissa problem, möjligen orsakade av Python 3 eller genom att använda Chrome för att komma åt min lokala sida.
Min GET-hanteringsfunktion slutade med att se ut så här:
def do_GET(self):
try:
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.send_header('Access-Control-Allow-Origin', '*')
self.end_headers()
try:
fn = GETHANDLERS[self.path[1:]]
self.wfile.write(fn().encode("utf-8"))
except KeyError:
self.wfile.write(self.path.encode("utf-8"))
return
except:
self.send_error(404, 'File Not Found: {0}'.format(self.path))
Där GETHANDLERS är en ordbok som kopplar URL:er till funktioner - till exempel, om du besöker http://localhost/my_func, kallas funktionen GETHANDLERS['my_func']. Om ingen funktion finns för URL:en, echoas URL:en bara tillbaka.
Jag har implementerat funktioner som manipulerar en lokal SQLite-databas med sqlite3-modulen. Här är ett exempel på frågan för att lista allt i Categories-tabellen:
import sqlite3
def get_categories():
con = sqlite3.connect('my.db')
c = con.cursor()
c.execute('''SELECT * FROM Categories;''')
return [cat[0] for cat in c.fetchall()]
GETHANDLERS["categories"] = get_categories
För att använda den lokala appen är det nödvändigt för användaren att installera Python, sedan köra serverskriptet innan webbplatsen öppnas. Jag tror att detta är ganska acceptabelt!
Svar #2
Om du verkligen bara vill ha en klientbaserad applikation, bör du verkligen överväga att använda HTML5-teknologier (WebSQL, Indexed DB). En bra läsning finns här: HTML5 doctor. Du kommer att behöva exportera databasen någonstans, eller låta användaren exportera databasen, och när användaren laddar om sidan bör databasen återansluta. Exempel: exportera websql till en csv-fil.
