Verfasst am: 15.10.2019, 19:33
Titel: Werte von Matlab in SQL Datenbank laden
Hallo zusammen,
ich habe mir über MySQL eine Datenbank erstellt, die ich auch über MATLAB erreichen kann.
Über MySQL erfolgte die Erstellung einer kleinen Tabelle. Nun möchte ich Messwerte aus Matlab an die bestehende Tabelle über eine neue Spalte anfügen.
Meine Versuche, das zu erreichen, blieb bisher ohne Erfolg. Auch im Netz finde ich hierzu keinerlei hilfreiche Informationen.
Lediglich das Anhängen einer neuen Spalte an die bestehende Tabelle habe ich in MATLAB über nachfolgenden Code erreicht:
Code:
sqlquery = ['ALTER TABLE tutorial.produkte ADD Test DECIMAL(10,2)'];
execute(conn,sqlquery);
ich verstehe die Frage nicht. Du schreibst, dass du "an die bestehende Tabelle über eine neue Spalte anfügen". Geschafft hast du "das Anhängen einer neuen Spalte an die bestehende Tabelle". Was ist denn der Unterschied?
Hast du es mit Funktionen wie
sqlwrite
und
update
versucht?
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Ich versuche das mal mit einem anderen Beispiel zu erklären. Nehmen wir an, ich habe eine Datenbank in MySQL erzeugt, welche die Spalten "messwert_num" und "Datum" besitzt. Meine Messwerte habe ich in MATLAB in der Variable "values" abgespeichert.
Diese Messwerte möchte ich nun an die bestehende Tabelle in der Datenbank anfügen. Als erstes habe ich hierzu eine neue Spalte "messwert" an die bestehende Tabelle angefügt:
d.h. die Tabelle sieht nun so aus:
"messwert_num" | "Datum" | "messwert"
Was mir nun allerdings nicht gelingt, ist die Daten aus der Variable values in die Spalte messwert zu transportieren. Für sqlwrite() müssen die Daten in Form einer Table erzeugt werden, wobei ich mir hier nicht sicher bin, wie ich eine Tabelle mit nur einer Spalte erzeuge.
Daher habe ich mich mit dem update() Befehl beschäftigt. Allerdings funktioniert nachfolgender Code nicht:
Es scheint mir, dass update() und sqlwrite() an sich nur geeignet sind, wenn ich nur bestimmte Werte einer Spalte ändern möchte, nicht aber die gesamte Spalte (so zeigen es die Beispiele in der MATLAB Hilfe). Denn für jeden zu ändernden Wert muss eine WHERE Bedingung gestellt werden. Dann müsste ich ja später bei 300 Messwerten ebenso viele WHERE Bedigungen erzeugen.
Ich hoffe, meine Argumentation hilft, mein Problem besser zu verdeutlichen.
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Danke, das mit array2table hat gut funktioniert . Allerdings werden die Messwerte an die Tabelle angehängt (siehe Bild), ich möchte aber dass sie ab der ersten Zeile eingefügt werden. Wie erreiche ich das?
Code:
values = [10;8;20];
colnames = {'messwert'};
val = array2table(values,'VariableNames',colnames);
sqlwrite(conn,"tutorial.messwerte",val)
Es ist zwar nicht die effizienteste Lösung, aber ich würde versuchen, den Table komplett neu zu schreiben statt zu ergänzen. Wenn die Datenmengen überschaubar sind, sollte das kein Performance-Problem machen.
Wenn dir das nicht weiter hilft, kannst du es auch noch bei MATLAB Answers oder beim Technischen Support versuchen
Viele Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
%Auswahl der Tabelle
tablename = 'tutorial.messwerte';
%Auswahl der Spalte
colnames = {'messwert'};
%Anzahl Zeilen der Tabelle
num_rows = size(data,1);
%Schleife zum Einfügen der Messwerte in entsprechende Spalte der Tabelle
for i = 1:num_rows
update(conn,tablename,colnames,values(i),['WHERE num = ', num2str(i)]) end
Ohne deine Ratschläge wäre ich nicht darauf gekommen. Vielen Dank
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.