SELECT SQL CON PYTHON
Publicado por CARLOS (19 intervenciones) el 06/02/2018 12:40:50
Buenos días:
Estoy inmerso en una mejora de un proyecto de control de Accesos con Rfid que consiste en añadirle caducidad y franja horaria a los usuarios.
Entonces, dada la tabla
Trato de hacer un SELECT desde Python que busque si existe un registro "Serial1" o "Serial2" cuyo campo endDate sea posterior a la fecha actual y siempre que la hora actual se encuentre en la franja horaria comprendida entre HoraIni y HoraEnd.
Tengo el siguiente codigo pero no acaba de funcionar y tampoco se si es lo correcto.
Alguien me puede dar una idea...?
Gracias
Estoy inmerso en una mejora de un proyecto de control de Accesos con Rfid que consiste en añadirle caducidad y franja horaria a los usuarios.
Entonces, dada la tabla
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
34
35
36
37
38
39
40
41
42
43
DROP TABLE IF EXISTS `users`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `usersrfid` (
`id` int(255) NOT NULL AUTO_INCREMENT,
`empresa` varchar(30) NOT NULL,
`nombre` varchar(25) NOT NULL,
`apellido1` varchar(25) NOT NULL,
`apellido2` varchar(25) NOT NULL,
`nprod` int(6) NOT NULL,
`serial1` varchar(10) NOT NULL,
`serial2` varchar(10) NOT NULL,
`rfid` varchar(8) NOT NULL,
`devProfileId` int(2) NOT NULL DEFAULT '0',
`HoraIni` time NOT NULL DEFAULT '12:00:00',
`HoraEnd` time NOT NULL DEFAULT '16:00:00',
`endDate` date NOT NULL DEFAULT '2035-12-31',
`service` varchar(30) NOT NULL,
PRIMARY KEY (`serial1`),
UNIQUE KEY `serial` (`serial1`),
KEY `id` (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=100010 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `usersrfid`
--
LOCK TABLES `usersrfid` WRITE;
/*!40000 ALTER TABLE `usersrfid` DISABLE KEYS */;
INSERT INTO `usersrfid` VALUES
(0,'SAMPLE','PROFILE','TYPE','0',59990,'4269959534','','0',0,'12:00:00','16:00:00','2035-12-31','Example'),
(1,'SAMPLE','PROFILE','TYPE','1',59991,'4269956318','','0',1,'12:00:00','16:00:00','2035-12-31','Example'),
(2,'SAMPLE','PROFILE','TYPE','2',59992,'4269939662','','0',2,'12:00:00','16:00:00','2035-12-31','Example'),
(3,'SAMPLE','PROFILE','TYPE','3',59993,'4269934878','','0',3,'12:00:00','16:00:00','2035-12-31','Example'),
(4,'SAMPLE','PROFILE','TYPE','4',59994,'4269958510','','0',4,'12:00:00','16:00:00','2035-12-31','Example'),
(5,'SAMPLE','PROFILE','TYPE','5',59995,'4269936206','','0',5,'12:00:00','16:00:00','2035-12-31','Example'),
(6,'SAMPLE','PROFILE','TYPE','6',59996,'4269935374','','0',6,'12:00:00','16:00:00','2035-12-31','Example'),
(7,'SAMPLE','PROFILE','TYPE','7',59997,'4269956046','','0',7,'12:00:00','16:00:00','2035-12-31','Example'),
(8,'SAMPLE','PROFILE','TYPE','8',59998,'4269960270','','0',8,'12:00:00','16:00:00','2035-12-31','Example'),
(9,'SAMPLE','PROFILE','TYPE','9',59999,'4269957054','','0',9,'12:00:00','16:00:00','2035-12-31','Example');
/*!40000 ALTER TABLE `usersrfid` ENABLE KEYS */;
UNLOCK TABLES;
Trato de hacer un SELECT desde Python que busque si existe un registro "Serial1" o "Serial2" cuyo campo endDate sea posterior a la fecha actual y siempre que la hora actual se encuentre en la franja horaria comprendida entre HoraIni y HoraEnd.
Tengo el siguiente codigo pero no acaba de funcionar y tampoco se si es lo correcto.
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
# If we have the UID, continue to usersrfid
if status == MIFAREReader.MI_OK:
temp0 = (hex(uid[0])).zfill(4)
temp1 = (hex(uid[1])).zfill(4)
temp2 = (hex(uid[2])).zfill(4)
temp3 = (hex(uid[3])).zfill(4)
temp = temp0 + temp1 + temp2 + temp3
serial = temp.upper().replace("0X","")
today = time.strftime("%Y-%m-%d", time.localtime())
resultado = gmysql.cur.execute("""SELECT * FROM usersrfid WHERE serial1 = %s OR serial2 = %s""",(serial,serial,))
# Print UID
row = gmysql.cur.fetchone()
if (resultado == 1 ):
section = gmysql.cur.execute("""SELECT * FROM usersrfid WHERE serial1 = %s OR serial2 = %s AND HoraIni < NOW() AND HoraEnd > NOW() AND endDate > %s""",(serial,serial,today,))
if (section == 1):
print "(Autorizado)"
time.sleep(0.1)
else:
print "(Caducado)"
time.sleep(0.1)
else:
print "(Denegado)"
time.sleep(0.1)
Alguien me puede dar una idea...?
Gracias
Valora esta pregunta


0