Как в MySQL хранить мультипараметры для HTTP POST? - PullRequest
0 голосов
/ 03 ноября 2010

HTTP Post может иметь несколько параметров, например:

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

Я занимаюсь разработкой веб-паука на Python, и у меня возникла проблема, как отследить разницу с одним и тем же URL-адресом с разными параметрами. Теперь я могу загрузить контент, , но я не знаю, как сохранить параметры сообщенияв поле таблицы SQLite3. Легко хранить параметры в базе данных, такой как MySQL, для разработчика системы, но поскольку параметры разных сайтов различны. Я предпочитаю хранить параметры записи в одном поле, а не в одном.сопоставление отношений один в таблице.

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
  • Хранить URL-адреса http и отправлять параметры и отслеживать изменения.
  • Параметр post содержит несколько пар ключ-значение
  • Сохраненные параметры следует декодировать обратно в параметры.
  • Проблемы кодирования должны быть рассмотрены.

Я видел несколько решений, таких как JSON, XML и YAML.Я предполагаю, что этот формат на самом деле хранится как строковый (CHAR) тип в SQLite, в UTF-8.Но я понятия не имею, есть ли какой-нибудь удобный способ преобразовать их обратно в тип кортежа Python?Или я могу закодировать параметры записи в параметры получения с помощью + и & symbal и декодировать их обратно в параметры публикации?

Извините, я просто новичок в Python.

Ответы [ 2 ]

3 голосов
/ 03 ноября 2010

Вы можете конвертировать в и из 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]
>>> 

Лучше использовать его, потому что он более универсален, чем самодельное и раздельное кодирование, он поддерживает любую сложность вложения.

0 голосов
/ 03 ноября 2010

Я бы, вероятно, согласился с предложением Фроста - кодирование 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'

Очевидно, что ваши разделители (, и : в этом случае) должны быть тщательно выбраны, но это работает в крайнем случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...