Неверное значение - Python для модели в Django - PullRequest
1 голос
/ 10 марта 2012

Проблема, с которой я столкнулся, заключается в том, что при попытке вставить некоторые значения в базу данных, созданную моделью Django, значения строго числовые, но при попытке вставить их я получаю сообщение об ошибке:

567523
<type 'int'>
Warning: Incorrect integer value: 'id' for column 'id_unidad' at row 1
cursor.execute(sql, ('id',))

код, который я использую для вставки с использованием запроса mysql:

import MySQLdb
import _mysql

id = 567523
print id
print type(id)

sql = """INSERT INTO gprs_evento ( id_unidad ) VALUES (%s)"""

db = MySQLdb.Connect(host="localhost", user="*****",passwd="******",db="gp")
cursor = db.cursor()

try :
    cursor.execute(sql, ('id',))
    db.commit()
except _mysql.Error, e:
    print "Error %d: %s" % (e.args[0], e.args[1])

Модель Django, которую я использую:

from django.db import models

class Evento(models.Model):
    id_unidad = models.IntegerField(max_length=15)

Попытка вставить в каждое поле базы данных:

id: 13831010240120
<type 'long'>
ip:  3235021102
<type 'long'>
e: 2
<type 'int'>
H:  102718.0
<type 'float'>
LN:  210.128871
<type 'float'>
LO:  3203.323664
<type 'float'>
V:  28.0
<type 'float'>
A:  90.0
<type 'float'>
F:  40101.0
<type 'float'>

В модели я использую ссылку на Типы полей и попробуйте IntegerField, BigIntegerField, DecimalField, но ничего, я просто вставил нормальное число из 15 символов из Python.

Ответы [ 2 ]

2 голосов
/ 10 марта 2012

Вы пытаетесь вставить строку "id" вместо значения переменной id.

Это должно быть:

cursor.execute(sql, (id,))

Конечно, нет никакой причины использовать для этого необработанный SQL.

0 голосов
/ 11 марта 2012

Как сказал Даниэль, «нет причин использовать сырой SQL».Вместо этого вы должны использовать синтаксис модели Django для вставки новых элементов в базу данных, например так:

e = Evento.objects.create(id_unidad=id)

Эта одна строка может заменить все, что ниже print type(id).Что еще более важно, использование моделей Django для работы с базами данных дает вам бесплатную защиту от внедрения SQL.

...