Seite 1 von 2
Datenbank auf Server verändern
Verfasst: Donnerstag 23. Juli 2009, 12:28
von Maenny
Hi Folks,
Ich versuche mich gerade dabei, eine Sqlite3 Datenbank auf meinem Server über ein CGI Skript anzusprechen und zu verändern (Datensätze hinzufügen, Werte verändern etc). Das Skript funktioniert local auf meinem Rechner, aber beim Hochladen bekomme ich die Fehlermeldung:
A problem occurred in a Python script. Here is the sequence of function calls leading up to the error, in the order they occurred.
/is/htdocs/wp1148401_PRPBRJYGA0/www/tucasacanaria/cgi/mail.py in ()
44 conn=sqlite3.connect('tcc.db')
45 c=conn.cursor()
46 c.execute("""CREATE TABLE IF NOT EXISTS persons (code, name, telefone);""")
47 c.execute("""SELECT MAX(code) FROM bookings;""")
48 result = c.fetchall()
c = <sqlite3.Cursor object at 0xb7b11530>, c.execute = <built-in method execute of sqlite3.Cursor object at 0xb7b11530>
<class 'sqlite3.OperationalError'>: unable to open database file
Irgendwie kann das Skript nicht auf meine tcc.db, die auf dem Server liegt, bearbeiten. Ich habe sogar testweise die Zugriffsrechte der tcc.db auf 777 gesetzt, hat aber auch nichts geholfen. Muss ich noch irgendwas machen, um die Datei verändern zu dürfen? Muss sich vielleicht das CGI skript (das im gleichen Ordner wie die Datenbank liegt), in irgendeiner Weise authentifizieren? Das ganze läuft auf einem Apache Server bei Hosteurope.
Dankbar für jede Hilfe,
Manuel
Verfasst: Donnerstag 23. Juli 2009, 12:37
von BlackJack
@Maenny: Was denkt denn das Skript, was das aktuelle Verzeichnis ist? Das ist vielleicht gar nicht das Verzeichnis, in dem die Datenbankdatei liegt.
Verfasst: Donnerstag 23. Juli 2009, 13:18
von Maenny
Ich ändere das cwd nicht, dann müsste es doch das Verzeichnis sein, in dem das Skript liegt, oder bin ich ich da falsch?
Verfasst: Donnerstag 23. Juli 2009, 13:30
von cofi
Du bist da falsch.
Das CWD ist das, in dem das Skript gestartet wurde, d.h. das, in dem sich der Benutzer befindet.
Das Skriptverzeichnis ist:
oder auch
wenn das Skript direkt aufgerufen wurde.
Verfasst: Donnerstag 23. Juli 2009, 13:44
von Maenny
Ja, stimmt. Ist in diesem Fall tatsächlich gleich, da sich der Nutzer im selben Verzeichnis wie das skript befindet. (Habe das auch mal kurz getestet und mir mit os.getcwd() das cwd ausgeben lassen - ist das gleiche Verzeichnis wie das skriptfile.) Daran liegt es also nicht.
Danke,
Manuel
Verfasst: Donnerstag 23. Juli 2009, 13:56
von cofi
Ist dass denn auch eine Sqlite3 DB? Und bau mal ein ``os.path.exists(db)`` ein, um zu pruefen, dass es die Datei ueberhaupt gibt.
Verfasst: Donnerstag 23. Juli 2009, 13:59
von Maenny
ja, die Datei ist eine sqlite3 db, die Datei ist auch vorhanden, sowie der TABLE. Ich kann die Datenbank auch lesen, nur eben nichts verändern.
Ein SELECT * FROM data funktioniert, nur eben das INSERT INTO etc nicht.
Manuel
Re: Datenbank auf Server verändern
Verfasst: Donnerstag 23. Juli 2009, 14:22
von /me
Maenny hat geschrieben:Ich habe sogar testweise die Zugriffsrechte der tcc.db auf 777 gesetzt, hat aber auch nichts geholfen.
Und im Ordner an sich hat das Skript Schreibrechte?
Gruß,
Matthias
Verfasst: Donnerstag 23. Juli 2009, 14:36
von Maenny
Uh da bin ich mir nicht sicher. Wo bekomme ich das raus, bzw wie stelle ich das ein?
Manuel
Verfasst: Donnerstag 23. Juli 2009, 14:49
von Leonidas
``ls -ld ordnername``
Verfasst: Donnerstag 23. Juli 2009, 14:54
von Maenny
Äh, bin in PHP so gar nicht bewandert. Kann man das mit einem FTP-Programm einstellen (so wie die Zugriffsrechte auf Dateien?). Oder muss ich das in der Administration des Hosts machen?
Verfasst: Donnerstag 23. Juli 2009, 14:56
von Leonidas
Das ist nicht PHP (urks!) sondern ein ganz normaler Shell-Befehl.
Verfasst: Donnerstag 23. Juli 2009, 15:10
von Maenny
Hm ich muss gestehen, bin leider kein Profi und arbeite nicht mit einer Shell. Wenn ich im FTP Programm mir dir Stats für den besagten Ordner geben lasse, sieht das so aus:
-rwxrwxrwx 1 ftp200555 ftponly 4984 Jul 23 15:06 mail.py
-rwxrwxrwx 1 ftp200555 ftponly 2048 Jul 23 15:03 tcc.db
Kann das an diesem ftponly liegen? Ich rate hier, weil ich das noch nie gemacht habe und keine Ahnung habe. Also bitte nicht beißen, wenn ich dumme Fragen stelle.
Manuel
Verfasst: Donnerstag 23. Juli 2009, 15:28
von Maenny
jetzt funzts. Ich musste die Directoy-Zugriffsrechte auf 777 setzen, dann funktionierts. Is aber trotzdem irgendwie merkwürdig. Das müßte doch auch möglich sein, sich mit dem CGI Skript in irgendeiner Form zu authentifizieren, damit die Zugriffsrechte nicht für alle Wel offen sind?
Manuel
Verfasst: Donnerstag 23. Juli 2009, 15:38
von veers
Du machst da etwas sehr törichtes. Auf einem shared hosting system, wonach das aussieht solltest du definitiv nicht die Zugriffsrechte auf 777 setzen.
Jonas
Verfasst: Donnerstag 23. Juli 2009, 15:40
von Leonidas
Die Sicherheit ist bei Hostern die nicht jedem User einen einenen Unix-Account zuweisen eh total im Keller.
Verfasst: Donnerstag 23. Juli 2009, 16:02
von Maenny
Deshalb wäre ich ja auch für alternative Lösungen dankbar.
Verfasst: Donnerstag 23. Juli 2009, 20:42
von Leonidas
Brauchbarer Hoster könnte eine Lösung sein.
Verfasst: Montag 27. Juli 2009, 10:35
von Maenny
Hab da nochmal eine Frage:
Mein Host hat die Möglichkeit, auch MySQL Datenbanken zu benutzen. Wenn ich diese von einem Python - CGI Skript aus füttern möchte, brauche ich ja soweit ich weiß das mySQL modul MySQLdb. Wenn ich eine App für den lokalen Gebrauch programmiere, weiß ich wie das alles funktioniert. Was mach ich aber, wenn ich das Modul in einem Skript, das auf dem Server liegt, importieren möchte, ich aber keine Möglichkeit habe, das Pythonmodul auf dem Server zu installieren. Gibts da einen workaround?
manuel
Verfasst: Montag 27. Juli 2009, 10:37
von Leonidas
Der Workaround ist, den Hoster zu bitten MySQLdb zu installieren.