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

Python 如何使用MySQL存储HTTP POST的多个参数?,python,post,sqlite,Python,Post,Sqlite,HTTP Post可能有多个参数,例如: (而params=({'country':'US'},{'city':'NYC'}) 我正在用Python开发一个web spider,我面临一个问题,如何用不同的参数跟踪相同url的差异。现在我可以加载内容,但我不知道如何将post参数存储在SQLite3表的一个字段中。对于系统开发人员来说,将参数存储在MySQL这样的数据库中很容易,但是由于参数不同不同的站点是多种多样的。我更喜欢将post参数存储在单个字段中,而不是将一对一的关系映射存储在表中 H

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

(而params=({'country':'US'},{'city':'NYC'})

我正在用Python开发一个web spider,我面临一个问题,如何用不同的参数跟踪相同url的差异。现在我可以加载内容,但我不知道如何将post参数存储在SQLite3表的一个字段中。对于系统开发人员来说,将参数存储在MySQL这样的数据库中很容易,但是由于参数不同不同的站点是多种多样的。我更喜欢将post参数存储在单个字段中,而不是将一对一的关系映射存储在表中

HTTP获取

>>> 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() >>>导入URL库 >>>params=urllib.urlencode({'spam':1,'eggs':2,'bacon':0}) >>>f=urllib.urlopen(“http://www.musi-cal.com/cgi-bin/query?%s%s) >>>打印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() >>>导入URL库 >>>params=urllib.urlencode({'spam':1,'eggs':2,'bacon':0}) >>>f=urllib.urlopen(“http://www.musi-cal.com/cgi-bin/query“,参数) >>>打印f.read() 我的项目配置:

  • Python+SQLite3
  • 存储http url和post参数并跟踪更改
  • post参数包含多个键值对
  • 存储的参数应解码回参数
  • 应涵盖编码问题
我看到了多种解决方案,如JSON、XML和YAML。我猜这种格式实际上是以字符串(CHAR)类型存储在SQLite中的UTF-8中。但我不知道是否有任何简便的方法可以将它们转换回Python元组类型?或者,我可以用+和&symbal将post参数编码为get参数,并将其解码回post参数吗


对不起,我只是Python的新手。

您可以像这样轻松地转换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]
>>> 

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

您可以像这样轻松地转换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]
>>> 

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

我可能会同意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'

显然,您的分隔符(
在本例中)需要仔细选择,但这在紧要关头起作用。

我可能会同意弗罗斯特的建议-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'

很明显,您的分隔符(
在本例中)需要仔细选择,但这非常有用。

感谢您的所有响应。我选择JSON作为SQLite3中的对象存储。我还将尝试使用urllib.quote对特殊字符串进行编码,以避免编码问题。感谢您的所有响应。我选择JSON作为SQLite3中的对象存储。我还将尝试使用urllib.quote对特殊字符串进行编码l字符串以避免编码问题。