Problem bei Parameterübergabe bei sqlite: execute

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Hazzard
User
Beiträge: 26
Registriert: Dienstag 4. Dezember 2007, 21:09

Dienstag 18. Dezember 2007, 13:34

Hi,

also ich bekomme in der Zeile 18 immer einen Fehler (siehe unten), und ich weiß nicht wieso.

Code: Alles auswählen

try:
    from pysqlite2 import dbapi2 as sqlite
except ImportError:
    import sqlite3 as sqlite

class nn:
    def __init__(self, connection, tneurons = "", tsynapses = ""):
        self.tneurons = tneurons
        self.tsynapses = tsynapses
        self.connection = connection
        self.cursor = self.connection.cursor()

    def __del__(self):
        self.cursor.close()
        self.connection.close()

    def add_neuron(self, content):
        self.cursor.execute('INSERT INTO %s (content) VALUES (?)' % self.tneurons, (content))
        self.connection.commit()
        return self.cursor.lastrowid

    def add_synapse(self, id1, id2):
        self.cursor.execute('INSERT INTO %s (id1, id2) VALUES (?, ?)' % self.tsynapses, (id1, id2))
        self.connection.commit()
        return self.cursor.lastrowid

    def create_tables(self, neurons, synapses):
        self.tneurons = neurons
        self.tsynapses = synapses
        self.cursor.execute('CREATE TABLE %s (id INTEGER AUTO_INCREMENT PRIMARY KEY, content VARCHAR(50))'
        % self.tneurons)
        self.cursor.execute('CREATE TABLE %s (id1 INTEGER, id2 INTEGER)' % self.tsynapses)
        self.connection.commit()

    def delete_tables(self, neurons, synapses):
        self.cursor.execute('DROP TABLE %s' % neurons)
        self.cursor.execute('DROP TABLE %s' % synapses)
        self.connection.commit()

    def delete_neuron(self):
        self.cursor.execute('DELETE FROM %s WHERE id = "?"' % self.tneurons, id)
        self.connection.commit()

    def delete_synapse(self, id1, id2):
        self.cursor.execute('DELETE FROM %s WHERE id1 = "?" AND id2 = "?"' % self.tsynapses, (id1, id2))
        self.connection.commit()

    def get_neighbours(self, neighbours):
        #......
nn = nn(sqlite.connect('test.db'))

nn.delete_tables("nn_neurons", "nn_synapses")
nn.create_tables("nn_neurons", "nn_synapses")

id1 = nn.add_neuron("String1")
id2 = nn.add_neuron("String2")

nn.add_synapse(id1, id2)
Interpreter hat geschrieben:Traceback (most recent call last):
File "M:\Privat\Programming\Projects\Python\sqlitetest.py", line 57, in <module>
id1 = nn.add_neuron("string1")
File "M:\Privat\Programming\Projects\Python\sqlitetest.py", line 18, in add_neuron
self.cursor.execute('INSERT INTO %s (content) VALUES (?)' % self.tneurons, (content))
ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 7 supplied.
BlackJack

Dienstag 18. Dezember 2007, 14:05

Kommata erzeugen Tupel.  Etwas nur in Klammern zu setzen bringt nichts.

Code: Alles auswählen

In [32]: type(42)
Out[32]: <type 'int'>

In [33]: type((42))
Out[33]: <type 'int'>

In [34]: type((42,))
Out[34]: <type 'tuple'>
Falls Du Dich fragst woher die 7 Werte kommen, zähl mal die Buchstaben in 'string1'. :-)
Hazzard
User
Beiträge: 26
Registriert: Dienstag 4. Dezember 2007, 21:09

Dienstag 18. Dezember 2007, 14:12

Ok, vielen Dank.

Dass die 7 Werte von dem Wort "string1" kommen, ist mir auch aufgefallen ^^. Aber dass ich das Komma für einen Tupel brauch, war mir nicht bewusst.

kthx bai
Antworten