problem mit sqlite

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
cyp++
User
Beiträge: 69
Registriert: Freitag 22. September 2006, 13:54

hi @

ich habe irgendwie ein Problem im Code, weiß nicht wo der Fehler liegt, bitte um Hilfe.

Code: Alles auswählen

# friendsorganizer.py

import msvcrt
from pysqlite2 import dbapi2 as sqlite


class FriendsOrganizer(object):

    def __init__(self, vorname='', nachname='', tel='', strasse='', plz=''):
        self.vorname = vorname
        self.nachname = nachname
        self.tel = tel
        self.strasse = strasse
        self.plz = plz

        # verbindung zur Datenbank herstellen
        self.conn = sqlite.connect('E://friends.db', isolation_level = None)
        self.cursor = self.conn.cursor()

        self.cursor.execute("CREATE DB friends")
        self.cursor.execute("CREATE TABLE friendsliste(id integer autoincrement primary key, vorname varchar(50) not null, nachname varchar(50), tel varchar(15), strasse varchar(50), plz varchar(10));")

    def __ladeDatenbank(self):
        pass

    def erstelleEintrag(self):
        pass

    def loescheEintrag(self):
        pass

    def sucheEintrag(self):
        pass

# main

print 'Friends Organizer 0.1\n*********************\n\n[1] Erstellen\n[2] Bearbeiten\n[3] Suchen\n[4] Loeschen'
if msvcrt.getch() == '1':
    vorname = raw_input('\nVorname: ')
    nachname = raw_input('Nachname: ')
    tel = raw_input('Tel: ')
    strasse = raw_input('Strasse: ')
    plz = raw_input('Plz: ')

    organizer = FriendsOrganizer(vorname, nachname, tel, strasse, plz)
    organizer.erstelleEintrag()
Traceback ( most recent call last): File "E:\daten\friendsorganizer.py", line 45, in ? organizer = FriendsOrganizer(vorname, nachname, tel, strasse, plz) File "E:\daten\friendsorganizer", line 20, in __init__
self.cursor.execute("CREATE DB friends")
pysqlite2.dbapi2.OperationalError: near "DB": Syntax Error

Ok, in der Nähe von DB, aber ich finde dort nichts! Bitte helft mir!

mfg
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

cyp++ hat geschrieben:Ok, in der Nähe von DB, aber ich finde dort nichts! Bitte helft mir!
SQLite unterstützt einfach kein ``CREATE DATABASE``, weil in einer SQLite-Datei nicht mehrere Datenbanken stehen können.

P.S.: Ich verschiebe mal den Thread ins richtige Forum.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
cyp++
User
Beiträge: 69
Registriert: Freitag 22. September 2006, 13:54

stimmt, ich hatte vergessen,dass mit ``connect`` ja eine Datenbank erstellt wird!
cyp++
User
Beiträge: 69
Registriert: Freitag 22. September 2006, 13:54

Code: Alles auswählen

 self.cursor.execute("CREATE TABLE friendslist(id integer auto increment primary key, vorname varchar(50) not null, nachname varchar(50), tel varchar(15), strasse varchar(50), plz varchar(10));")
        self.cursor.execute("INSERT INTO friendslist VALUES(NULL, '$s', '$s', '$s', '$s', '$s');") % (self.vorname, self.nachname, self.tel, self.strasse, self.plz)

Da bekomme ich folgenden Fehler: TypeError: unsupported operand type(s) for %: 'pysqlite.dbapi2.Cursor' and 'Tuple'
BlackJack

Schön. Dann schau doch mal was links vom ``%`` steht und was rechts davon steht. Kleiner Tip: Links steht das Ergebnis des Methodenaufrufs `execute()` -> ein `Cursor`-Objekt und rechts davon ein Tupel. Aber das hat die Fehlermeldung eigentlich schon verraten.

Wenn Du das korrigierst, dann wird Dir wahrscheinlich ein ``TypeError: not all arguments converted during string formatting`` um die Ohren gehauen. Schau doch die Zeichenkette mit dem `INSERT` nochmal genau an.

Werte in SQL-Anweisungen sollte man aber sowieso nicht selbst in die Anfrage hineinformatieren, sondern das sollte man dem Datenbankmodul überlassen. Die Werte einfach als weiteres Argument an die `execute()`-Methode übergeben.
cyp++
User
Beiträge: 69
Registriert: Freitag 22. September 2006, 13:54

Hm. Ich verstehe gerad nicht genau, wie ich das nun umsetzen soll, kannst du mir das zeigen?
BlackJack

Code: Alles auswählen

# Schlecht / gefährlich:
cursor.execute(query % values)
# Besser:
cursor.execute(query, values)
Antworten