Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - logic: etwas in eine MySQL-DB schreiben

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    - √ - logic: etwas in eine MySQL-DB schreiben

    Ich habe ein -noch- seltsames Verhalten, wenn ich innerhalb eines Logik-Bausteins Ergebnisse in eine MySQL-Datenbank schreiben möchte.

    1. Ich habe eine (externe) MySQL-DB auf meinem Synology laufen
    2. Ich möchte errechnete Werte in sh.py auf der MySQL-DB speichern
    3. Dazu habe ich das python-Modul installiert: sudo apt-get install python-mysqldb

    Das klappt auch soweit, wenn ich einen Logik-Baustein (/usr/smarthome/logics/mysql.py) einzeln aufrufe, wird eine Verbindung zur DB aufgerufen und alles ist gut.
    Wenn ich den Logikbaustein von der Logik-Engine (/usr/smarthome/etc/logic.conf) aufrufe, erhalte ich einen Fehler im Log: "ImportError: No module named MySQLdb"


    Was mache ich falsch?


    hier nochmal die Eckdaten:
    • RPI-Image 2013-11-16.img
    • zusätzlich das MySQLdb-Modul für python

    logic.conf
    Code:
    [mysql]
        filename = mysql.py
        cycle = 60

    /logic/mysql.py

    Code:
    #!/usr/bin/env python
    #
    
    import MySQLdb as mdb
    
    con = mdb.connect('192.168.xx.xx', 'xxx', 'xxx', 'xxx')
    cur = con.cursor()
    con.close()

    #2
    Hallo,

    SH.py verwendet Python3, und Dein Script?

    Bis bald

    Marcus

    Kommentar


      #3
      Zitat von mknx Beitrag anzeigen
      Hallo,

      SH.py verwendet Python3, und Dein Script?

      Bis bald

      Marcus
      das macht aktuell nichts ausser die von mir im Eingangspost geposteten Zeilen. Oder meinst Du, das MySQLdb-Modul ist nicht Python3-konform? Das müsste ich mal nachsehn.

      Gruß,
      Thomas.

      Kommentar


        #4
        Hi,

        ich denk Du hast MySQLdb nicht für Py3 installiert. Und Dein Script verwendet Python 2.


        Bis bald

        Marcus

        Kommentar


          #5
          Zitat von mknx Beitrag anzeigen
          ich denk Du hast MySQLdb nicht für Py3 installiert. Und Dein Script verwendet Python 2.
          Super! Du hast richtig gedacht!

          Für alle anderen: Da das sh.pi Image python2 *und* python3 verwendet, muss man explizit für python3 z.B. den "pure mysql-connector" verwenden. und das geht so:

          Code:
          wget [URL]http://dev.mysql.com/get/Downloads/Connector-Python/mysql-connector-python-1.2.2.tar.gz[/URL]
          sudo gunzip mysql-connector-python-1.2.2.tar.gz
          sudo tar xf mysql-connector-python-1.2.2.tar
          cd mysql-connector-python-1.2.2
          
          sudo python3 setup.py install
          Damit wird der connector in die python3-Library gepackt.
          Der Rest ist dann wieder einfach.

          Danke, Marcus!

          Kommentar


            #6
            Zitat von mknx Beitrag anzeigen
            Hallo,

            SH.py verwendet Python3, und Dein Script?

            Bis bald

            Marcus
            Gibt es eigentlich auch eine Möglichkeit mit php oder perl zu arbeiten statt Python3?

            Kommentar


              #7
              Hallo Christoph,

              ja, aber nicht mit SmartHome.py. Das .py steht für Python.

              Stelle doch mal die Frage welche Logikengine mit PHP oder Perl im Hauptforum, dort ist sie besser aufgehoben.

              Davon abgesehen ist es nicht nett einen Thread zu kapern.

              Bis blad

              Marcus

              Kommentar


                #8
                Kannst du mal noch ein paar Beispielcode-Zeilen posten ?
                Damit man grob erahnen kann wie du in die DB schreibst ?

                Gruß

                Kommentar


                  #9
                  Das ist ziemlicher python-Standard!
                  nimm das als Vorlage:
                  /logic/mysql.py
                  Code:
                  #!/usr/bin/env python
                  
                  import mysql.connector
                  
                  cnx = mysql.connector.connect(user='xxx', password='xxx',
                                                host='192.168.xxx.xxx',
                                                database='xxx')
                  cur = cnx.cursor()
                  cur.execute("[COLOR=DarkRed]DEIN SQL-CODE HIER[/COLOR]")
                  cnx.commit()
                  cnx.close()
                  Ich hoffe, das hilft weiter!

                  Kommentar

                  Lädt...
                  X