我遇到的问题是确定进入数据库的数据类型,我认为Django和Python代码中的每个人都是IntegerField模型,只将它们全部插入到一个列表中,然后将其插入到基础数据中。
另一方面,根据行的规则,我没有非常清楚地编写Python代码长度,我所做的只是看到最后代码很长,用空格分隔以对齐下面的下一行做不知道这种方式是否好,而且代码不会失败。
必须输入ip_unidad的数据是('186 .99.41.000',3333)在'self.addr [0]'中找到,数据日期是'091211',它位于'self.Cadenapura [17]中“
并尝试“self.Cadenapura [17] = int(self.Cadenapura [17])”但没什么
它将输入数据记录在数据库中,但两个空格为0。
任何想法都会感激不尽。
Warning: Incorrect integer value: 'self.addr[0]' for column 'ip_unidad' at row 1
('self.addr[0]','self.Cadenapura[17]')
Warning:Incorrect integer value: 'self.Cadenapura[17]' for column 'fecha' at row 1
('self.addr[0]','self.Cadenapura[17]')
sql = """INSERT INTO carro ( ip_unidad , hora ) VALUES (%s,%s)"""
db = MySQLdb.Connect(host="localhost", user="root",passwd="--------",db="gprslmgs")
cursor = db.cursor()
try :
cursor.execute(sql,('self.addr[0]','self.Cadenapura[17]'))
db.commit()
except:
db.rollback()
class Carro(models.Model):
ip_unidad = models.IntegerField(max_length=15)
fecha = models.IntegerField(max_length=6)
谢谢。
答案 0 :(得分:1)
我对Django不是很熟悉,但我看到的是你指定的对象' - 认为你不需要这样做。你尝试过类似的东西吗?
cursor.execute(sql % (self.addr[0], self.Cadenapura[17]))
或者:
cursor.execute(sql, (self.addr[0], self.Cadenapura[17],))
While browsing i found the following MySQLdb sample code:
import MySQLdb
db = MySQLdb.connect(passwd="moonpie",db="thangs")
c = db.cursor()
c.executemany(
"""INSERT INTO breakfast (name, spam, eggs, sausage, price)
VALUES (%s, %s, %s, %s, %s)""",
[
("Spam and Sausage Lover's Plate", 5, 1, 8, 7.95 ),
("Not So Much Spam Plate", 3, 2, 0, 3.95 ),
("Don't Wany ANY SPAM! Plate", 0, 4, 3, 5.95 )
] )
所以我认为它应该是我提到的第二种方式。
答案 1 :(得分:0)
我看到两个主要问题 - 首先是'186.99.41.000'
不是整数,这是一个字符串。 Django提供了专为此设计的ip address field。
您的第二个问题与第一个问题类似,因为'09876'
是一个字符串,而您的列类型是IntegerField
,但是当您将'09876'
转换为整数时,您将会获取9876
因为在Python中,从0开始的数字是八进制文字:
>>> print 127
127
>>> print 0177
127
>>> print 0x7f
127
因此,您需要将'09876'
作为字符串存储在数据库中,为此,您需要将列类型更改为CharField
。
答案 2 :(得分:0)
就像我在你的新问题上说的那样,你应该使用Django的模型api来为你处理SQL。
Carro.objects.create(ip_unidad=self.addr[0], fecha=self.Cadenapura[17])
此外,您还应该修改您的模型。您应该使用
而不是使用IntegerFieldsclass Carro(models.Model):
ip_unidad = models.IPAddressField()
fecha = models.DateField()
然后在保存数据时(使用模型的objects.create),您需要确保您的日期是python datetime.date对象。使用IPAddressField也意味着您不需要打扰trying to convert the IP address to an int。