Avatar billede t-rex Nybegynder
27. februar 2009 - 20:13 Der er 18 kommentarer og
1 løsning

sidste post en en ODBC database

Hey er der en måde at få den sidste post i en ODBC database i python?

sådan ser min kode ud:

Con = odbc.odbc("dbtest")
Cursor = Con.cursor()
Cursor.execute("SELECT * FROM LOG WHERE ENAME = 'u1vPT1'")
Result = Cursor.fetchone()  #.fetchall()

print Result


//Ronni
Avatar billede arne_v Ekspert
27. februar 2009 - 22:23 #1
SELECT TOP 1 * FROM log WHERE ENAME = 'u1vPT1' ORDER BY id DESC

hvis MS SQLServer

SELECT * FROM log WHERE ENAME = 'u1vPT1' ORDER BY id DESC LIMIT 1

hvis MySQL

o.s.v.

(id er det felt som angiver hvad der er "sidst")
Avatar billede t-rex Nybegynder
27. februar 2009 - 23:49 #2
Det har jeg prøve men da det er en 2 Gb database tager den sql sætning for lang tid at kører...

Tænkte på om der måske var en form for Cursor.fetchone() som måske kunne fortælle ODBCén er den skal kun tage den sidste post
Avatar billede t-rex Nybegynder
27. februar 2009 - 23:50 #3
Som det er lige nu tager det ca 4 min at kører:
SELECT TOP 1 * FROM log WHERE ENAME = 'u1vPT1' ORDER BY id DESC

og jeg vil gerne med på max 10 sec. hvis det kan lad sig gøre
Avatar billede arne_v Ekspert
28. februar 2009 - 00:17 #4
put index på id feltet !
Avatar billede arne_v Ekspert
28. februar 2009 - 00:18 #5
Så skulle det tage under 1/10 sekund.
Avatar billede t-rex Nybegynder
02. marts 2009 - 17:23 #6
har snakket med firmaet der har lavet databasen i dag og det var desværre ikke en mulighed... men de sage at jeg skulle soter efter date men nu kommer den med en fejl som jeg ikke kan forstå:

today = datetime.datetime.now()

Con = odbc.odbc("dbtest")
Cursor = Con.cursor()
Cursor.execute("SELECT DATE FROM LOG WHERE ENAME = 'u1vPT1' and DATE = "%today)


Result = Cursor.fetchone()  #.fetchall()

print today
print Result

Cursor.execute("SELECT DATE FROM LOG WHERE ENAME = 'u1vPT1' and DATE = "%today)
TypeError: not all arguments converted during string formatting
Avatar billede arne_v Ekspert
02. marts 2009 - 17:58 #7
Der mangler da noget i den formatstring !

Cursor.execute("SELECT DATE FROM LOG WHERE ENAME = 'u1vPT1' and DATE = %s" % today)

måske
Avatar billede t-rex Nybegynder
02. marts 2009 - 18:18 #8
når jeg prøver det får jeg denne fejl:

    Cursor.execute("SELECT DATE FROM LOG WHERE ENAME = 'u1vPT1' and DATE = %s" % today)
dbi.progError: [Seven Technologies][IGSS32 ODBC Driver]Unexpected extra token: 18 in EXEC
Avatar billede arne_v Ekspert
02. marts 2009 - 18:22 #9
Så er den gal med dato formatet !

Du skal så have formateret today i det format som databasen/driveren forventer.
Avatar billede t-rex Nybegynder
02. marts 2009 - 18:24 #10
dettet er det jeg får ud fra DATE posten: datetime.datetime(2008, 11, 30, 22, 0)

så du har nok ret i at det er forkert det jeg gør.
Avatar billede t-rex Nybegynder
02. marts 2009 - 18:38 #11
jeg har prøvet at ændre det til dette:

today = time.strftime("%y-%m-%d %H:%M:%S")

da jeg får: datetime.datetime(2008, 11, 30, 22, 0)
ud fra databasen men det giver stadig samme fejl
Avatar billede arne_v Ekspert
02. marts 2009 - 18:57 #12
Hvilket format forventer database ?
Avatar billede arne_v Ekspert
02. marts 2009 - 18:58 #13
Og skal der evt. nogle special tegn omkring f.eks. '' eller ## eller ... ?
Avatar billede t-rex Nybegynder
02. marts 2009 - 19:09 #14
dette er hvad jeg har fra dokumentationen:

The date and time of the logged value (in seconds), for example,

22-04-99 10:57:25
Avatar billede t-rex Nybegynder
02. marts 2009 - 19:10 #15
og så står der SQL type: TIMESTAMP
Avatar billede arne_v Ekspert
03. marts 2009 - 04:03 #16
Det er jo rent gætværk når ikke vi ved mere.

Prøv:

    Cursor.execute("SELECT DATE FROM LOG WHERE ENAME = 'u1vPT1' and DATE = '%s'" % today)
Avatar billede arne_v Ekspert
03. marts 2009 - 04:03 #17
Jeg har sat '' omkring datoen.
Avatar billede t-rex Nybegynder
13. marts 2009 - 10:04 #18
Jeg tror bare vi dropper det da jeg tror det er fordi den dll driver der er lavet til systemet ikke kan håndter det jeg smider efter den...

Men smider du ikke et svar for du skal have points for din hjælp.
Avatar billede arne_v Ekspert
13. marts 2009 - 14:30 #19
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester