Foros del Web » Programando para Internet » Python »

Como guardar variables desde .py hacia la base de datos de Django

Estas en el tema de Como guardar variables desde .py hacia la base de datos de Django en el foro de Python en Foros del Web. Lo primero es como guardar una ip en una variable? siempre que le doy: >>> i = 1 >>> print type(i) <type 'int'> >>> ip ...
  #1 (permalink)  
Antiguo 05/03/2012, 16:26
Avatar de diegoug  
Fecha de Ingreso: mayo-2011
Ubicación: Colombia
Mensajes: 52
Antigüedad: 13 años, 5 meses
Puntos: 1
Pregunta Como guardar variables desde .py hacia la base de datos de Django

Lo primero es como guardar una ip en una variable? siempre que le doy:

>>> i = 1
>>> print type(i)
<type 'int'>
>>> ip = 186.168.74.000
File "<stdin>", line 1
ip = 186.168.74.000
^
SyntaxError: invalid syntax

Quiero almacenar unos datos que me entran al servidor como 'str' pasarlos a un modelo Django de base de datos como el numero que es, el ejemplo anterior es la ip:

>>> ip = self.addr[0]
>>> print "ip unidad: ",ip
ip: 186.168.74.000
>>> print type(ip)
<type 'str'>

Como este hay varios números que entran como str, que quiero guardar en el modelo de la base de datos Django:

212841.00
0440.138352
-7406.713584
0.0
012642000481031

Se que para esto tengo que usar del lado del modelo (models.FloatField o models.DecimalField)
ip = models.IntegerField(max_length=15)

intento pasar las variables de un 'str' a un tipo que se acople a cada dato.

ip = Decimal(self.addr[0])

para almacenar el dato lo hago desde python a la base de datos Django:

sql = """INSERT INTO unidad ( ip ) VALUES (%s)"""

No estoy seguro de lo que significa %s y como afecta mi código?

Me sale este error:

/unidades.py:5: Warning: Incorrect integer value: 'ipunidad' for column 'ip' at row 1 cursor.execute(sql, ('ipunidad',))

La idea es meter la ip y los otros numero de forma adecuada en la base de datos de Django, les agradecería una ayuda, es algo básico pero me toma mucho tiempo resolverlo.

Gracias.
__________________
_________________________
Diego Alonso Uribe Gamez
Twitter: @DiegoUG

Última edición por diegoug; 05/03/2012 a las 16:30 Razón: redacción
  #2 (permalink)  
Antiguo 05/03/2012, 19:18
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Como guardar variables desde .py hacia la base de datos de Django

Una IP es simplemente un entero de 32 bits.

Por ejemplo 127.0.0.1 es una representación de ese entero (2130706433) dividido en octetos.

Con eso en cuenta podrías implementar una clase IP, modelarla, etc...

O podrías usar el campo IPAddressField
  #3 (permalink)  
Antiguo 05/03/2012, 19:29
Avatar de diegoug  
Fecha de Ingreso: mayo-2011
Ubicación: Colombia
Mensajes: 52
Antigüedad: 13 años, 5 meses
Puntos: 1
De acuerdo Respuesta: Como guardar variables desde .py hacia la base de datos de Django

Cita:
Iniciado por razpeitia Ver Mensaje
Una IP es simplemente un entero de 32 bits.

Por ejemplo 127.0.0.1 es una representación de ese entero (2130706433) dividido en octetos.
Gracias.

No lo había pensado así, me suena mejor.

apenas tenga resultados yo te comento.

un saludo.
__________________
_________________________
Diego Alonso Uribe Gamez
Twitter: @DiegoUG
  #4 (permalink)  
Antiguo 06/03/2012, 15:06
Avatar de diegoug  
Fecha de Ingreso: mayo-2011
Ubicación: Colombia
Mensajes: 52
Antigüedad: 13 años, 5 meses
Puntos: 1
Sonrisa Respuesta: Como guardar variables desde .py hacia la base de datos de Django

Este codigo pasa la ip a long
Código:
import socket, struct

ipentrante = socket.inet_aton(ip)
iplong = struct.unpack("!L", ipentrante)[0]
este código pasa la ip en long a como estaba
Código:
ip = socket.inet_ntoa(struct.pack('!L', iplong))
Gracias.
__________________
_________________________
Diego Alonso Uribe Gamez
Twitter: @DiegoUG

Etiquetas: django
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:27.