Datensatz neu anlegen Auf MS SQL Server 2017

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Maverik81
User
Beiträge: 7
Registriert: Samstag 11. April 2020, 20:58

Hallo,

ich bekomme als Python Anfänger hier meinen "neuen Datensatz" - mit Variablen - nicht in meinen MS SQL 2017 geschrieben. Ersetzte ich die Variablen gegen die "tatsächlichen Werte mit Anführungszeichen" funktionert alles und der neue Datensatz steht in der "Test-Datenbank". Ich schaffe es also aktuell nicht, Inhalte von Variablen per "INSERT INTO" in die Datenbank zu schreiben. Sieht jemand meinen Fehler? Ich steh auf,m Schlauch!?!?! Vielen Dank für Eure Hilfe im Vorraus! :? :? :?:

(Mein Code im Visual Studio 2017 aktuell)

import pyodbc
import sqlite3

#Verbindung zur Datenbank aufbauen
conn =pyodbc.connect('Driver={ODBC Driver 17 for SQL Server};' 'SERVER=SFILE1\SQLSERVER;' 'DATABASE=Testi;' 'UID=User;' 'PWD=Hallo;')
cursor = conn.cursor()

#Variablen für neuen Datensatz befüllen
ID1 = "2"
Vorname1 = finanzennet.HTMLModul.text
Name1 = "Test"
Datum1 = "1.4.2020"

#neuen Datensatz in die Datenbank schreiben
dsatzNeu = ("INSERT INTO T_Name1 (ID, Vorname, Name, Datum) VALUES" (ID1, Vorname1, Name1, Datum1))
cursor.execute(dsatzNeu)

#Abfrage, hat der neue Eintrag funktioniert?
dsatzAbfrage = ("SELECT * FROM T_Name1")
cursor.execute(dsatzAbfrage)
for dsatz in cursor:
print(dsatz)
conn.commit()

#Datenbankverbindung schließen
conn.close()
Sirius3
User
Beiträge: 17748
Registriert: Sonntag 21. Oktober 2012, 17:20

Das ist ja nicht einmal gültiges Python. SQL-Statements braucht Platzhalter für Variablen. Das müßte bei pyodbc ? sein.
\ muß escaped werden.
Die Klammern um die literalen Strings sind überflüssig.
Variablennamen schreibt man komplett_klein. Benutze keine Abkürzungen, dsatz?
Die 1 an den Variablennamen sind unsinnig. Man nummeriert keine Variablennamen.
Auch die Nummer am Tabellennamen sieht komisch aus. Ebenso das T_, denn aus der Benutzung sollte klar sein, was eine Tabelle ist. Das solltest Du dringend auch ändern.
Benutze keine *-Selects, sondern gib immer die konkreten Feldnamen an.
Die Einrückung beim for ist falsch; es wird immer mit 4 Leerzeichen pro Ebene eingerückt.

Code: Alles auswählen

import pyodbc

#Verbindung zur Datenbank aufbauen
connection =pyodbc.connect('Driver={ODBC Driver 17 for SQL Server};' 'SERVER=SFILE1\\SQLSERVER;' 'DATABASE=Testi;' 'UID=User;' 'PWD=Hallo;')
cursor = connection.cursor()

id = "2"
vorname = finanzennet.HTMLModul.text
name = "Test"
datum = "1.4.2020"

#neuen Datensatz in die Datenbank schreiben
cursor.execute("INSERT INTO T_Name1 (ID, Vorname, Name, Datum) VALUES (?, ?, ?, ?)", [id, vorname, name, datum]) 

#Abfrage, hat der neue Eintrag funktioniert?
cursor.execute("SELECT ID, Vorname, Name, Datum FROM T_Name1")
for row in cursor:
    print(row)
connection.commit()
connection.close()
Maverik81
User
Beiträge: 7
Registriert: Samstag 11. April 2020, 20:58

Hallo Sirius3,

vielen Dank für die Anmerkungen.Man merkt mir mein großes Anfängerpotenzial sicher an. Ich habe meine Variablen angepasst, eine neue Tabelle erstellt und unsinnige Variablen rausgenommen.
Ich bedanke mich und gelobe Beherzigung in meinem weiteren Vorgehen.
Vielen Dank.

Viele Grüße

Maverik81
Antworten