如何用MySQL存储HTTP POST的多参数?

时间:2010-11-03 10:11:56

标签: python post sqlite

HTTP Post可能有多个参数,例如:

http://example.com/controller/(而params =({'country':'US'},{'city':'NYC'})

我正在使用Python开发一个网络蜘蛛,我遇到了一个问题,如何跟踪具有不同参数的相同网址的差异。现在我可以加载内容,但我不知道如何将post params存储在SQLite3表的字段中。很容易将params存储在MySQL等数据库中供系统开发人员使用,但是因为不同地点的参数各种各样。我更喜欢将post params存储在单个字段中,而不是在表中存储一对一的关系。

HTTP GET

>>> import urllib
>>> params = urllib.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0})
>>> f = urllib.urlopen("http://www.musi-cal.com/cgi-bin/query?%s" % params)
>>> print f.read()

HTTP POST

>>> import urllib
>>> params = urllib.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0})
>>> f = urllib.urlopen("http://www.musi-cal.com/cgi-bin/query", params)
>>> print f.read()

我的项目配置:

  • Python + SQLite3
  • 存储http网址并发布参数并跟踪更改。
  • post params包含多个键值对
  • 存储的参数应该被解码回params。
  • 应涵盖编码问题。

我看到了JSON,XML和YAML等多种解决方案。我想这种格式实际上在SQLite中以UTF-8格式存储为字符串(CHAR)类型。但我不知道是否有任何方便的方法将它们转换回Python元组类型?或者,我可以使用+和&编码post params到params symbal,并将其解码回post params?

抱歉,我只是Python的新手。

2 个答案:

答案 0 :(得分:3)

您可以像这样轻松地转换为json:

>>> import json
>>> json.dumps({'spam': 1, 'eggs': 2, 'bacon': 0})
'{"eggs": 2, "bacon": 0, "spam": 1}'
>>> json.loads('{"eggs": 2, "bacon": 0, "spam": 1}')
{u'eggs': 2, u'bacon': 0, u'spam': 1}

>>> json.dumps((1,2,3,4))
'[1, 2, 3, 4]'
>>> json.loads('[1, 2, 3, 4]')
[1, 2, 3, 4]
>>> 

更好地使用它,因为它比家庭制造更加通用。分离编码,它支持任何嵌套复杂性。

答案 1 :(得分:0)

我可能会考虑Frost的建议 - JSON编码更加强大。但是,在过去的情况下,我被迫采取更简单的路线:

>>> d = {'spam': 1, 'eggs': 2, 'bacon': 0}
>>> l = [(a +":"+str(b)) for a,b in d.items()]
>>> ','.join(l)
'eggs:2,bacon:0,spam:1'

显然,您的分隔符(在这种情况下为,:)需要谨慎选择,但这可以解决这个问题。