Python MySQL Insert Funktion

Dann ist shdd wohl kein String, musst du halt casten:
Code:
    sql = "INSERT INTO temperaturen(Temp) VALUES ('" + str(shdd) + "')"
    cur.execute(sql)

Edit:
Wenn das da oben geht, dann sollte auch folgendes gehen:
Code:
sql = "INSERT INTO temperaturen(Temp) VALUES (?)"
cur.execute(sql, str(shdd))
 
Probier mal
Code:
"INSERT INTO temperaturen(Temp) VALUES ('{}')".format(shdd)
P.S.: wie gesagt, schön ist das nicht. Hab aber bisher noch nicht mit nacktem SQL in Python gearbeitet und bin zu faul zum Googeln. Hab peewee benutzt.
 
Zuletzt bearbeitet: (fehlende Tüdels eingebaut)
@distrophik: Dann fügt er "None" ein.
@Tumbleweed: Dann bekomme ich Error 1054
 
Dann fehlen wohl noch die single/double quotes bei meinem. Probier mal. Hättest du aber selbst drauf kommen können. ;)
 
So bekomme ich immer noch Error 1054:
Code:
sql = "INSERT INTO temperaturen(Temp) VALUES ({})".format('shdd')
 
Er gibt mir das aus:
Code:
root@proxmox:~# python temp.py
/dev/sda: ST9250827AS: 30°C
/dev/sdb: ST3500630NS: 35°C
/dev/sdc: ST3500630NS: 36°C
None
Error 1054:
root@proxmox:~#
Anscheinend steht da also "None" drin.
Aber wie man da drüber sieht, gibt er die aus.
 
Dann bau noch ein return ein:
Code:
def systemhdd():
        return os.system("bash -c \"hddtemp /dev/sda\"")
 
Dann bekomme ich das:
Code:
root@proxmox:~# python temp.py
/dev/sda: ST9250827AS: 30°C
/dev/sdb: ST3500630NS: 35°C
/dev/sdc: ST3500630NS: 36°C
0
Error 1054:
root@proxmox:~#
 
Etwas Selbstinitiative würde nicht schaden. Such wie du Rückgabewerte von der shell abrufen kannst. Hier ist z.B.: Link

Edit:
Code:
import commands
...
def systemhdd():
    return commands.getoutput("bash -c \"hddtemp /dev/sda\"")
 
Zuletzt bearbeitet:
Damit:
Code:
def systemhdd():
        #os.system("bash -c \"hddtemp /dev/sda\"")
        #p = sub.Popen("hddtemp /dev/sda",stdout=sub.PIPE,stderr=sub.PIPE)
        #output, errors = p.communicate()
        p = os.popen('hddtemp /dev/sda',"r")
        while 1:
                line = p.readline()
                if not line: break
                print line
bekomme ich nur eine leere Zeile.

Damit
Code:
        p = sub.Popen("hddtemp /dev/sda",stdout=sub.PIPE,stderr=sub.PIPE)
        output, errors = p.communicate()
nur das:
Code:
Traceback (most recent call last):
  File "temp.py", line 27, in <module>
    shdd = systemhdd()
  File "temp.py", line 12, in systemhdd
    p = sub.Popen("hddtemp /dev/sda",stdout=sub.PIPE,stderr=sub.PIPE)
  File "/usr/lib/python2.7/subprocess.py", line 679, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1259, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory
 
Auf die Weise?
Code:
import os
...
def systemhdd():
    var = os.popen("hddtemp /dev/sda").readlines()
    return var
 
Zuletzt bearbeitet:
Dann gibt er mir nur das zurück:
Code:
/dev/sdb: ST3500630NS: 36°C
/dev/sdc: ST3500630NS: 37°C
Error 1054:
Heißt, bekomme nichts zurück.

Wenn ich print(var) mache, sagt er mir, das:
Code:
Traceback (most recent call last):
  File "temp.py", line 30, in <module>
    print var
NameError: name 'var' is not defined
 
Vermutlich, weil dein print(var) nicht im Scope der Funktion systemhdd steht, sondern irgendwo danach. Da ist var nicht mehr definiert.

Die Fehlermeldung "OSError: [Errno 2] No such file or directory" von weiter oben bedeutet, dass die Datei, die ausgeführt werden soll nicht da ist. Liegt vielleicht daran, dass du zuerst immer 'bash -c "hddtemp ..."' ausgeführt hast und später dann nur noch "hddtemp ...".
 
Zurück
Oben