В предыдущем посте - Jquery. Работа с json-данными (клиент-серверное взаимодействие) - было показано клиент-серверное взаимодействие в одном направлении: от сервера к клиенту. На стороне сервера отрабатывал скрипт - json.php, но предположим, что у нас есть Apache, например, который "завязан" на python с cgi интерфейсом. Таким образом, нам нужно переписать скрипт: json.php -> json.py. Итак.
json.py:
#!/usr/bin/env python
import MySQLdb
import json
# Параметры (тестовые), необходимые для коннекта к базе данных db_name
server = "localhost"
username = "root"
password = "password"
# Тестовое имя базы данных
dbname = "db_name"
# sql-запрос. Возвращает данные двух работников из одного отдела
sql = "SELECT DISTINCT a.id, a.date, a.staff, a.otdel \
FROM db_name.tbl_name a, db_name.tbl_name b \
WHERE a.otdel = b.otdel AND a.id <> b.id \
ORDER BY a.otdel ASC \
LIMIT 2"
# Подключение к серверу и базе данных...
db = MySQLdb.connect(server, username, password, dbname)
# Подготовка курсора...
cursor = db.cursor()
# Выполняем sql-запрос к базе данных...
cursor.execute(sql)
# Извлекаем результат запроса в переменную для дальнейшего разбора
result = cursor.fetchall()
# Отключаемся от сервера...
db.close()
# Создаем пустой список из двух пустых словарей
data = [{}, {}]
for i in range(0, 2):
data[i]['id'] = result[i][0]
data[i]['date'] = result[i][1]
data[i]['staff'] = result[i][2]
data[i]['otdel'] = result[i][3]
print("Content-type: application/json\n")
print(json.dumps(data))
Тут все понятно, два пустых словаря в списке data нужны для записи результатов sql-запроса (две записи). В конечном виде список примет вид:
[{'date': 12032013, 'otdel': 'it', 'id': 16, 'staff': 'developer'}, {'date': 12032013, 'otdel': 'it', 'id': 61, 'staff': 'tester'}]
Который отправляется в ответ клиенту после обработки методом json.dumps(), в итоге получим:
'[{"date": 12032013, "otdel": "it", "id": 16, "staff": "developer"}, {"date": 12032013, "otdel": "it", "id": 61, "staff": "tester"}]'
Исходник - download.