如何处理期望varchar(255)的MySQL列中的字符串Python列表?

问题描述:

(MySQL新手提醒)如何处理期望varchar(255)的MySQL列中的字符串Python列表?

我从字段价格的API调用值收到回来,它们几乎总是一个字符串,例如

u'price': u'$49.99', 

虽然有时,有两种价格(前者价格与当前一个),以及API并将它们放在一个Python列表:

u'price': [ 
    u'$9.99', 
    u'$1,099.99' 
], 

随着我的专栏price定义为varchar(255),当价格是列表时插入失败。我不想将这些价格分成两列。我知道我可以在插入之前使用Python将列表分解为一个字符串,但是在MySQL中有没有一种方法可以允许字符串和列表?

+2

哦,男孩不这样做。告诉我们什么样的两个值对你意味着什么,并且考虑去十进制(12,2)路线或类似的东西 – Drew

+1

为什么你要把价格定义为一个varchar? – Ashalynd

+1

,因为Woot4Moo认为他不需要使用它:) – Drew

因此,它似乎是你试图解决两个不同的问题。首先我相信你的模式是正确的,只要你将一个值存储为一个varchar而不是一个小数(特别是因为你没有对它进行计算)。
第二个MySQL使用关系代数,所以值的“列表”的概念没有意义。将每个存储为自己的不同行(元组)并在运行时将它们连接在一起。

不过,我认为你需要考虑以下方法:

具有以下属性创建新表:

price_history( 
    price varchar(45), 
    date_changed datetime 
) 

这将使您能够妥善处理,从回来的API调用你的供应商。我认为,从可能出现两种回报的角度来看,API是非确定性的。退货应该(在我看来)总是作为一个列表/数组返回,以确保消费者可以随时处理响应而无需撤销负担(但这超出了范围)