大约有5000家公司,每家公司的价格都在4500美元左右,总价格在2200万美元左右。你知道吗
不久前,我写了一段代码,以这样的格式存储数据-
class Endday(models.Model):
company = models.TextField(null=True)
eop = models.CommaSeparatedIntegerField(blank=True, null=True, max_length=50000)
为了存储,代码是-
for i in range(1, len(contents)):
csline = contents[i].split(",")
prices = csline[1:len(csline)]
company = csline[0]
entry = Endday(company=company, eop=prices)
entry.save()
虽然代码很慢(很明显),但它确实可以工作并将数据存储在数据库中。有一天,我决定删除Endday的所有内容,并再次尝试存储。但它没有工作抛出一个错误Database locked
。你知道吗
总之,我做了一点研究,知道MySql不能处理这么多的数据。那么它最初是如何储存的呢?我得出的结论是,所有这些价格都是存储在一开始,之后很多都存储在数据库中,所以这将不会得到存储。你知道吗
经过一点研究,我知道我应该使用PostgreSql,所以我改变了数据库,进行了迁移,然后继续尝试代码,但没有成功。我错在说-
psycopg2.DataError: value too long for type character varying(50000)
好吧,我想让我们试着使用bulk_create
并对代码进行了一点修改,但我也遇到了同样的错误。你知道吗
下一步,我想也许让我们做两个模型,一个是公司名称,另一个是价格和那家公司的钥匙。所以我再次修改了密码-
class EnddayCompanies(models.Model):
company = models.TextField(max_length=500)
class Endday(models.Model):
foundation = models.ForeignKey(EnddayCompanies, null=True)
eop = models.FloatField(null=True)
还有那些观点-
to_be_saved = []
for i in range(1, len(contents)):
csline = contents[i].split(",")
prices = csline[1:len(csline)]
company = csline[0]
companies.append(csline[0])
prices =[float(x) for x in prices]
before_save = []
for j in range(len(prices)):
before_save.append(Endday(company=company, eop=prices[j]))
to_be_saved.append(before_save)
Endday.objects.bulk_create(to_be_saved)
但令我惊讶的是,这是如此缓慢,在中间,它只是停止了对一家公司。我试着找出哪一个特定的代码减慢了速度,结果是-
before_save = []
for j in range(len(prices)):
before_save.append(Endday(company=company, eop=prices[j]))
to_be_saved.append(before_save)
好吧,现在我又回到原点了,我什么都想不起来了,所以我按了那个钟。我现在的问题是-
我认为您可以为
Company
和Price
创建一个单独的模型,如下所示:以下是保存数据的方式:
更新:我注意到它与第二个实现类似,唯一的区别是保存数据的方式。我的实现迭代次数较少。你知道吗
相关问题 更多 >
编程相关推荐