
Fehlermeldung:
" File "c:/testpumpe/Funktionen für MS DB und Auslesen/s1_s2_auf_db.py", line 38, in <module>
cursor.execute("INSERT INTO XXX.dbo.[RAW-TEST-1] (s2, s3, s4, s5, s6, s7, s8, s9, s10, s11) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", (s1, s2, s3, s4, s5, s6, s7, s8, s9, s10))
pyodbc.IntegrityError: ('23000', "[23000] [Microsoft][ODBC SQL Server Driver][SQL Server]Cannot insert the value NULL into column 'id', table
'XXX.dbo.RAW-TEST-1'; column does not allow nulls. INSERT fails. (515) (SQLExecDirectW); [23000] [Microsoft][ODBC SQL Server Driver][SQL Server]The statement has been terminated. (3621)")"
Habe schon verschiedene Insert Befehle ausprobiert, bisher leider ohne Erfolg. Irgendwie mag die DB meine variablen nicht aufnehmen. s2 sollte auch kein ID feld sein.
Vielen Dank an jeden der sich Zeit für eine konstruktive Antwort/Kritik nimmt.
typische Zeile der *txt
3005584465;2855422-13;122264665226;0730;29.01.21;21:13:02;31.36;okay;;
Code:
import numpy as np
import pandas as pd
import pyodbc
server = 'xxx'
database = 'xxx'
username = 'xxx'
password = 'xxx'
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password)
df = pd.read_csv("back_full_mp29012021.txt",
sep=";",
header=None
)
df.columns = ["Auftragsnummer", "Materialnummer", "Seriennummer", "Prüfplatz","Datum","Uhrzeit","Prüfzeit","Status","Fehler","Messung"]
print (df)
#z - Zeile
z = 0
for row in df.itertuples():
s1=str(df['Auftragsnummer'][z])
s2=str(df['Materialnummer'][z])
s3=str(df['Seriennummer'][z])
s4=str(df['Prüfplatz'][z] )
s5=str(df['Datum'][z] )
s6=str(df['Uhrzeit'][z])
s7=str(df['Prüfzeit'][z])
s8=str(df['Status'][z])
s9=str(df['Fehler'][z])
s10=str(df['Messung'][z])
cursor = cnxn.cursor()
#Rest to_do _ ggf noch Fehlermeldungen abschneiden wegen String mit 50 Zeichen?
#cursor.execute("INSERT INTO xxx.dbo.[RAW-TEST-1] (s2, s3, s4, s5, s6, s7, s8, s9, s10, s11) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)", (s1, s2, s3, s4, s5, s6, s7, s8, s9, s10))
cursor.execute("INSERT INTO xxx.dbo.[RAW-TEST-1] (s2, s3, s4, s5, s6, s7, s8, s9, s10, s11) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", (s1, s2, s3, s4, s5, s6, s7, s8, s9, s10))
#cursor.execute("""INSERT INTO xxx.dbo.[RAW-TEST-1] (s2, s3, s4, s5, s6, s7, s8, s9, s10, s11)
#VALUES ({},{},{},{},{},{},{},{},{},{})".format(s1, s2, s3, s4, s5, s6, s7, s8, s9, s10)""")
#cursor.execute("INSERT INTO xxx.dbo.[RAW-TEST-1] (s3,s4,s5,s6,s7,s8,s9,s10,s11,s12) values(?,?,?,?,?,?,?,?,?,?)", s1, s2, s3, s4, s5, s6, s7, s8, s9, s10)
#cursor.execute("""INSERT INTO xxx.dbo.[RAW-TEST-1] (s2, s3, s4, s5, s6, s7, s8, s9, s10, s11)
#VALUES ("{s1}", "{s2}", "{s3}", "{s4}","{s5}","{s6}","{s7}","{s8}","{s9}","{s10}");""")
cnxn.commit()
cursor.close()
z=z+1 # Mit Z arbeiten für Prüfung auf neue Zahlen => in *.txt speichern und zu Beginn Zeilen zählen! Bei erolgreichem einfügen....