Seite 1 von 1
Aktulisierungsabfrage
Verfasst: Donnerstag 13. November 2008, 22:13
von oshoki
Ich würde gern wissen, wie man eine Aktualisierungsabfrage in Python für Sqlite realisieren kann.
In Access sieht das so aus
Bedeutet also, ich möchte in allen Eintragungen in Feld1 in der Tabelle1 die Inhalte auf 8 Zeichen reduzieren.
Freue mich auf jede Idee, wie das in Python aussehen kann
Re: Aktulisierungsabfrage
Verfasst: Donnerstag 13. November 2008, 23:02
von gerold
Hallo oshoki!
Vielleicht kannst du mit der substr()-Funktionarbeiten.
Dann könnte das vielleicht so aussehen:
Code: Alles auswählen
UPDATE Tabelle1 SET Tabelle1.Feld1 = SUBSTR(Tabelle1.Feld, 1, 8)
Mal ausprobieren...
mfg
Gerold

Re: Aktulisierungsabfrage
Verfasst: Donnerstag 13. November 2008, 23:09
von gerold
gerold hat geschrieben:Mal ausprobieren...
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
import sqlite3
conn = sqlite3.connect(":memory:")
sql = """
CREATE TABLE test (
id INTEGER PRIMARY KEY,
Feld1 text
)
"""
conn.execute(sql)
conn.commit()
sql = """
INSERT INTO test (
Feld1
) VALUES (
?
)
"""
conn.executemany(
sql, [
[u"asdfasdfasdfasdf"],
[u"jjjjjjjjjjjjjjjj"],
[u"uuuuuuuuuuuuuuuu"],
]
)
conn.commit()
sql = """
SELECT
Feld1
FROM
test
"""
cur = conn.cursor()
cur.execute(sql)
for row in cur:
print row
sql = """
UPDATE
test
SET
Feld1 = SUBSTR(Feld1, 1, 3)
"""
conn.execute(sql)
conn.commit()
sql = """
SELECT
Feld1
FROM
test
"""
cur = conn.cursor()
cur.execute(sql)
for row in cur:
print row
Ja, funktioniert!
Code: Alles auswählen
(u'asdfasdfasdfasdf',)
(u'jjjjjjjjjjjjjjjj',)
(u'uuuuuuuuuuuuuuuu',)
(u'asd',)
(u'jjj',)
(u'uuu',)
mfg
Gerold

Verfasst: Freitag 14. November 2008, 06:43
von oshoki
Super, das bringt mich auf die Idee, ob
auch funktionieren könnte. Leider Fehlanzeige
Vielen Dank für die schnelle Antwort und schöne Grüße an den grünen Inn
Verfasst: Freitag 14. November 2008, 13:01
von n4p
Müsste doch dann laut gerolds Beispiel auch
Code: Alles auswählen
sql = """
UPDATE
test
SET
Feld1 = SUBSTR(Feld1, 1, 2)
"""
lauten oder?
Verfasst: Freitag 14. November 2008, 13:13
von gerold
Hallo!
LEFT und RIGHT sind unnötige Funktionen. Die von LEFT und RIGHT erwarteten Ergebnisse lassen sich ohne Mehraufwand mit SUBSTR erzielen.
http://www.sqlite.org/lang_corefunc.html#substr
Code: Alles auswählen
LEFT(feldname, 2) --> SUBSTR(feldname, 1, 2)
RIGHT(feldname, 2) --> SUBSTR(feldname, -2)
mfg
Gerold

Verfasst: Freitag 14. November 2008, 15:03
von oshoki
substr funktioniert super.
Damit konnte ich wunderbar die Zeit vom Datum im string abtrennen. Doch steht der string für deutsches Datumsformat TT.MM.JJJ und sollte YYYY-MM-DD in meiner DB stehen. Sonst kann ich mit SQlite ganz offensichtlich nicht rechnen und es gehen nur explizite string-Vergleiche. Mit Between und <> ist nichts.
Wie kann ich denn die einzelnen Substr-Ausdrücke in einem UPDATE aneinanderreihen und auch noch mit einem "-" trennen? Mit dem + geht es offensichtlich nicht.
Verfasst: Freitag 14. November 2008, 16:03
von oshoki
Ich hab doch noch etwas gefunden. Da das Aneinanderreihen von substr und anderen strings beim set für update mit + nicht funktioniert, sollte ein anderer Befehl dazu dienen. Bei MySQL ist das concat. Bei SQLite ist das das Pipe-Zeichen ||.
Hier ist der Test in Anlehnung an Gerolds Vorarbeit:
Code: Alles auswählen
import sqlite3
conn = sqlite3.connect(":memory:")
sql = """
CREATE TABLE test (
id INTEGER PRIMARY KEY,
datum text
)
"""
conn.execute(sql)
conn.commit()
sql = """
INSERT INTO test (
datum
) VALUES (
?
)
"""
conn.executemany(
sql, [
[u"01.01.2008"],
[u"15.06.1969"],
[u"14.11.1998"],
]
)
conn.commit()
sql = """
UPDATE test
SET datum = SUBSTR(datum, 7, 4)
|| '-' ||
SUBSTR(datum, 4,2)
|| '-' ||
SUBSTR(datum, 1,2)
"""
conn.execute(sql)
conn.commit()
sql = """
SELECT
datum
FROM
test
"""
cur = conn.cursor()
cur.execute(sql)
conn.commit()
for row in cur:
print row
Heraus kommt dann:
Code: Alles auswählen
>>>
(u'2008-01-01',)
(u'1969-06-15',)
(u'1998-11-14',)
Verfasst: Freitag 14. November 2008, 18:10
von gerold