Misch aus Groß- und Normaltext in DB einfügen

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
DMD-OS
User
Beiträge: 165
Registriert: Freitag 28. Dezember 2018, 13:52

hi
ich würde gern den Text: "ABRUFZEITPUNKT: Frei wählbar!" als element in sqlite3 einfügen.
die struktur die ich verwende ist:

Code: Alles auswählen

ID INTEGER PRIMARY KEY AUTOINCREMENT                        data2 TEXT
                                                    ABRUFZEITPUNKT: Frei wählbar!
code-snippet:

Code: Alles auswählen

    def db_insert_MAIN(self, table_name, column_names, result_data):
        with self.conn:
            questionmarks = []
            for _ in column_names:
                questionmarks.append(' ?')
            sql = "INSERT INTO " + table_name + " (" + ', '.join(column_names) + ") VALUES (" + ', '.join(
                questionmarks) + ")"
            self.cursor.executemany(sql, result_data)
in der datenbank steht dann als eintrag nur BLOB.
ich habe schon versucht den type von TEXT auf NVARCHAR zu ändern, funktioniert aber leider auf nicht. :(
wie macht man es richtig?
DMD-OS
User
Beiträge: 165
Registriert: Freitag 28. Dezember 2018, 13:52

ok. das problem konnte ich lösen.
der eigentliche text war sehr viel länger, darin zwischendurch viele aufeinanderfolgende leerzeichen.
als ich diese überall weggenommen hatte, lief es.
warum nicht zu viele leerzeichen zwischendurch auftauchen dürfen, weiß ich nicht, würde ich aber gern wissen :)
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Das Problem ist dass du SQL per String Formatting zusammen setzt. Das ist nicht nur sehr unpraktisch und sehr fehleranfällig, sondern auch großartiger weg eine Anwendung anfällig für SQL Injection zu machen.

Es wesentlich besser eine DSL oder ein ORM zu nutzen, SQLAlchemy hätte beides. Wenn du wirklich komplexes SQL generieren möchtest ist vielleicht auch noch jinjasql eine Option, sieht aber nicht so aus als ob in der Situation stecken würdest.
Antworten