Datenbank auf Server verändern

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Maenny
User
Beiträge: 17
Registriert: Samstag 23. Mai 2009, 13:52
Kontaktdaten:

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
www.framefloor.de
www.manuleum.com
BlackJack

@Maenny: Was denkt denn das Skript, was das aktuelle Verzeichnis ist? Das ist vielleicht gar nicht das Verzeichnis, in dem die Datenbankdatei liegt.
Maenny
User
Beiträge: 17
Registriert: Samstag 23. Mai 2009, 13:52
Kontaktdaten:

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
Benutzeravatar
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:

Code: Alles auswählen

os.path.dirname(os.path.abspath(__file__))
oder auch

Code: Alles auswählen

sys.argv[0]
wenn das Skript direkt aufgerufen wurde.
Maenny
User
Beiträge: 17
Registriert: Samstag 23. Mai 2009, 13:52
Kontaktdaten:

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
www.framefloor.de
www.manuleum.com
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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.
Maenny
User
Beiträge: 17
Registriert: Samstag 23. Mai 2009, 13:52
Kontaktdaten:

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
www.framefloor.de
www.manuleum.com
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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
Maenny
User
Beiträge: 17
Registriert: Samstag 23. Mai 2009, 13:52
Kontaktdaten:

Uh da bin ich mir nicht sicher. Wo bekomme ich das raus, bzw wie stelle ich das ein?

Manuel
www.framefloor.de
www.manuleum.com
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

``ls -ld ordnername``
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Maenny
User
Beiträge: 17
Registriert: Samstag 23. Mai 2009, 13:52
Kontaktdaten:

Ä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
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Das ist nicht PHP (urks!) sondern ein ganz normaler Shell-Befehl.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Maenny
User
Beiträge: 17
Registriert: Samstag 23. Mai 2009, 13:52
Kontaktdaten:

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. :wink:

Manuel
www.framefloor.de
www.manuleum.com
Maenny
User
Beiträge: 17
Registriert: Samstag 23. Mai 2009, 13:52
Kontaktdaten:

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
www.framefloor.de
www.manuleum.com
Benutzeravatar
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. :roll:

Jonas
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Die Sicherheit ist bei Hostern die nicht jedem User einen einenen Unix-Account zuweisen eh total im Keller.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Maenny
User
Beiträge: 17
Registriert: Samstag 23. Mai 2009, 13:52
Kontaktdaten:

Deshalb wäre ich ja auch für alternative Lösungen dankbar.
www.framefloor.de
www.manuleum.com
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Brauchbarer Hoster könnte eine Lösung sein.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Maenny
User
Beiträge: 17
Registriert: Samstag 23. Mai 2009, 13:52
Kontaktdaten:

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
www.framefloor.de
www.manuleum.com
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Der Workaround ist, den Hoster zu bitten MySQLdb zu installieren.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten