[python] [sql] [raspberry pi] insert werkt niet, select wel

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • matthijs33
  • Registratie: Oktober 2010
  • Laatst online: 18-07 12:14
Op mijn raspberry pi heb ik een apache2/php/mysql installatie.
Alles werkt vlot, behalve de insert query.

Hier het script dat ik gebruik:
Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import MySQLdb
import smbus
import time
bus = smbus.SMBus(1)
address = 0x48
db = MySQLdb.connect (host = "localhost", user = "root", passwd = "raspberry", db = "temperatuur")
cursor = db.cursor()

cursor.execute("SELECT VERSION()")
row = cursor.fetchone()
print "MySQL server version:", row[0]

cursor.execute("select * from sensor1")                     <--- Dit werkt
rows = cursor.fetchall()
for row in rows:
        print row
       
def temp():
        temp1 = bus.read_i2c_block_data(address,0xAA)
        return temp1

#while True:                                                                         <--- Dit is voor moest het werken
        temps = temp()
        temps2 = temps[0] + (temps[1]/16)*0.0625
        print temps2
#        time.sleep(1)                                                             <--- Dit ook
sql = """insert into sensor1 (temperatuur) values(20)"""
#sql = """INSERT INTO `temperatuur`.`sensor1` (`Id`, `tijd`, `temperatuur`) VALUES (NULL, CURRENT_TIMESTAMP, '30.2')"""
#sql = """update sensor1 set temperatuur = 45 where Id = 1"""
#sql = """create table sensor2 (test char(20) not null)"""          <--- Dit werkt, de andere statements niet
#sql = """insert into sensor2 values('test')"""
print sql                                                                               <--- Voor test doeleinden
cursor.execute(sql)


ik kan dus wel lezen uit de database en zelfs tabellen maken, maar een record toevoegen lukt niet. Ik krijg ook geen error.
Als ik later via bijvoorbeeld phpmyadmin (ook met root account) een record bijvoeg, is het auto_increment Id wel omhoog gegaan telkens ik teste vanuit python.

Ik heb geen idee meer waar het probleem zou kunnen liggen, alvast niet bij permissies en de sql statements zijn denk ik ook correct.

Alvast bedankt.

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Misschien werkt de python library met transactions zonder implicit commit? Doe eens een COMMIT; query na je insert, kijken wat er dan gebeurt.

Verder zou ik testen of de queries op zichzelf wel werken in de mysql console.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • matthijs33
  • Registratie: Oktober 2010
  • Laatst online: 18-07 12:14
bedankt,

op het einde db.commit() toegevoegd en nu lijkt het wel te werken.

Bedankt
misschien een domme vraag: (ben niet vertrouwd met python)

Hoe krijg ik nu de temps2 variabele in die query?
Python:
1
sql = """insert into sensor1 (temperatuur) values(%d)""",temps2

Werkt niet

En een extra vraagje: waarom vind ik op het internet allemaal queries met 3 aanhalingstekens """?

[ Voor 70% gewijzigd door matthijs33 op 29-12-2012 17:33 ]


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

matthijs33:
Hoe krijg ik nu de temps2 variabele in die query?
Je zoekt de string formatter operator %. In python3 is die geloof ik deprecated, en wordt aangeraden string.format() te gebruiken, maar daar weet ik eerlijk gezegd de status niet helemaal van.
En een extra vraagje: waarom vind ik op het internet allemaal queries met 3 aanhalingstekens """?
Da's basic Python syntax :) Zie http://docs.python.org/2/...ysis.html#string-literals

Ik raad je aan gewoon even de manual door te nemen voor dit soort basics.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • matthijs33
  • Registratie: Oktober 2010
  • Laatst online: 18-07 12:14
de variabele temps2 is toch een double en geen string?

Python:
1
sql = """insert into sensor1 (temperatuur) values(%s)""" %(temps2)


Dit werkt wel

Heel erg bedankt

[ Voor 55% gewijzigd door matthijs33 op 29-12-2012 18:03 ]