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
Datenbank auf Server verändern
www.framefloor.de
www.manuleum.com
www.manuleum.com
@Maenny: Was denkt denn das Skript, was das aktuelle Verzeichnis ist? Das ist vielleicht gar nicht das Verzeichnis, in dem die Datenbankdatei liegt.
Ich ändere das cwd nicht, dann müsste es doch das Verzeichnis sein, in dem das Skript liegt, oder bin ich ich da falsch?
Zuletzt geändert von Maenny am Donnerstag 23. Juli 2009, 13:45, insgesamt 1-mal geändert.
www.framefloor.de
www.manuleum.com
www.manuleum.com
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
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.
Das CWD ist das, in dem das Skript gestartet wurde, d.h. das, in dem sich der Benutzer befindet.
Das Skriptverzeichnis ist:
Code: Alles auswählen
os.path.dirname(os.path.abspath(__file__))
Code: Alles auswählen
sys.argv[0]
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
Danke,
Manuel
www.framefloor.de
www.manuleum.com
www.manuleum.com
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
Ein SELECT * FROM data funktioniert, nur eben das INSERT INTO etc nicht.
Manuel
www.framefloor.de
www.manuleum.com
www.manuleum.com
Uh da bin ich mir nicht sicher. Wo bekomme ich das raus, bzw wie stelle ich das ein?
Manuel
Manuel
www.framefloor.de
www.manuleum.com
www.manuleum.com
Ä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?
www.framefloor.de
www.manuleum.com
www.manuleum.com
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
-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
www.framefloor.de
www.manuleum.com
www.manuleum.com
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
Manuel
www.framefloor.de
www.manuleum.com
www.manuleum.com
- veers
- User
- Beiträge: 1219
- Registriert: Mittwoch 28. Februar 2007, 20:01
- Wohnort: Zürich (CH)
- Kontaktdaten:
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
Jonas
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Deshalb wäre ich ja auch für alternative Lösungen dankbar.
www.framefloor.de
www.manuleum.com
www.manuleum.com
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
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
www.framefloor.de
www.manuleum.com
www.manuleum.com