blackbird hat geschrieben:Ich hab nur das fehlendes quoting bemängelt. Den Rest nichtmal angesehen
Also ich verstehe das nicht so ganz... Hab mir jetzt ein Test geschrieben:
Code: Alles auswählen
...
print "lastrowid:", hasattr(cursor, "lastrowid")
print "insert_id:", hasattr(cursor, "insert_id")
...
Bei mySQLdb v1.2.1g3 sieht das so aus:
lastrowid: True
insert_id: False
Bei mySQLdb v0.9.1 so:
lastrowid: 0
insert_id: 1
In meiner lokalen, neuen Version von MySQLdb, wird in cursors.py folgendes gemacht:
Das könnte ich ja eigentlich für die alte Version übernehmen... Mal sehen, ob das geht...
EDIT: So einfach geht das aber nicht:
Code: Alles auswählen
if hasattr(cursor, "lastrowid") == False:
cursor.lastrowid = cursor.insert_id()
ProgrammingError: execute() first
__doc__ = 'Exception raised for programming errors, e.g. ta...t, wrong number\n of parameters specified, etc.'
__getitem__ = <bound method ProgrammingError.__getitem__ of <_...ceptions.ProgrammingError instance at 0x81dec1c>>
__init__ = <bound method ProgrammingError.__init__ of <_mys...ceptions.ProgrammingError instance at 0x81dec1c>>
__module__ = '_mysql_exceptions'
__str__ = <bound method ProgrammingError.__str__ of <_mysq...ceptions.ProgrammingError instance at 0x81dec1c>>
args = ('execute() first',)
EDIT2: OK, ich glaube ich bin fast am Ziel:
Code: Alles auswählen
#!/usr/bin/python
# -*- coding: UTF-8 -*-
print "Content-type: text/html; charset=utf-8\r\n"
import cgitb;cgitb.enable()
import os, sys, cgi
import MySQLdb as dbapi
import config # PyLucid's "config.py"
conn = dbapi.connect(
host = config.dbconf["dbHost"],
user = config.dbconf["dbUserName"],
passwd = config.dbconf["dbPassword"],
db = config.dbconf["dbDatabaseName"],
)
cursor = conn.cursor( dbapi.cursors.DictCursor )
def _lastrowid():
result = cursor.execute("SELECT LAST_INSERT_ID() AS id;")
result = cursor.fetchall()[0]["id"]
return result
if hasattr(cursor, "lastrowid") == False:
cursor.lastrowid = _lastrowid()
print "<pre>"
print "lastrowid:", hasattr(cursor, "lastrowid")
print "insert_id:", hasattr(cursor, "insert_id")
print "-"*80
#-------------------------------------------------
print "cursor.lastrowid:", cursor.lastrowid
print "_lastrowid()....:", _lastrowid()
#-------------------------------------------------
cursor.execute(
"CREATE TABLE TempTestTable ("
"id INT( 11 ) NOT NULL AUTO_INCREMENT,"
"data1 VARCHAR( 50 ) NOT NULL,"
"PRIMARY KEY ( id )"
") COMMENT = 'temporary test table';"
)
#-------------------------------------------------
print "INSERT"
cursor.execute("INSERT INTO TempTestTable (data1) VALUES ('test1');")
print "cursor.lastrowid:", cursor.lastrowid
print "_lastrowid()....:", _lastrowid()
#-------------------------------------------------
print "INSERT"
cursor.execute("INSERT INTO TempTestTable (data1) VALUES ('test2');")
print "cursor.lastrowid:", cursor.lastrowid
print "_lastrowid()....:", _lastrowid()
#-------------------------------------------------
cursor.execute("DROP TABLE TempTestTable")
print "</pre>"
Das dumme ist nur, das ein
cursor.lastrowid = _lastrowid() es nicht bringt, weil man normalerweise ein cursor.lastrowid macht und kein cursor.lastrowid
()
Vorschläge?