Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 16, 2015 18:10:40

Egor2010
Зарегистрирован: 2014-10-22
Сообщения: 152
Репутация: +  0  -
Профиль   Отправить e-mail  

Python mysql {'колонка':'значение'}

Как сделать так чтобы я получал данные в таком формате {'колонка':'значение'}?
Колонка это имя колонки из базы
Сейчас я получаю данные к примеру так data
Вот код:

import MySQLdb
Sql="select * from users"
def query(sql):
db = MySQLdb.connect(host="localhost", user="root", passwd="пароль", db="")
cursor = db.cursor()
cursor.execute(sql)
data = cursor.fetchall()
db.close()
return data

Офлайн

#2 Апрель 16, 2015 20:14:02

Suguby27
Зарегистрирован: 2015-04-07
Сообщения: 26
Репутация: +  4  -
Профиль   Отправить e-mail  

Python mysql {'колонка':'значение'}

у курсора после выполнения запроса есть атрибут description, там все поля перечислены.
можно сделать что-то типа

data_dict = [
    dict((field.name, row[i]) for i, field in enumerate(description))
        for row in data
]
(за структуру description не отвечаю, пишу по памяти)
то есть вам надо сделать список словарей, а каждый словарь - содержит название поля и его значение

А обязательно испольлзовать сырой сикуль? может какой-нибудь ОРМ использовать, например peewee http://habrahabr.ru/post/207110/ хвалят

Отредактировано Suguby27 (Апрель 16, 2015 20:15:38)

Офлайн

#3 Апрель 16, 2015 21:39:23

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

Python mysql {'колонка':'значение'}

Suguby27

С peewee никто не сотрудничает толком. Под нее практически ничего нет Поэтом есть два варианта: или тормознутый джанговский ОРМ, или немного сложнее в понимании sqlalchemy. Peewee пока не вариант.

Офлайн

#4 Апрель 17, 2015 11:10:28

Egor2010
Зарегистрирован: 2014-10-22
Сообщения: 152
Репутация: +  0  -
Профиль   Отправить e-mail  

Python mysql {'колонка':'значение'}

def query(sql):
db = MySQLdb.connect(host="localhost", user="root", passwd="", db="")
cursor = db.cursor()
cursor.execute(sql)
data = cursor.fetchall()
db.close()
data_dict = [dict((field.name, row[i]) for i, field in enumerate(cursor.description)) for row in data ]
return data_dict
Выводит ошибку
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 7, in query
File "<stdin>", line 7, in <genexpr>
AttributeError: 'tuple' object has no attribute 'name'
Почему не работает?

Офлайн

#5 Апрель 17, 2015 12:31:10

Suguby27
Зарегистрирован: 2015-04-07
Сообщения: 26
Репутация: +  4  -
Профиль   Отправить e-mail  

Python mysql {'колонка':'значение'}

4kpt_III
Suguby27С peewee никто не сотрудничает толком. Под нее практически ничего нет Поэтом есть два варианта: или тормознутый джанговский ОРМ, или немного сложнее в понимании sqlalchemy. Peewee пока не вариант.

Отчегож не вариант? У нас второй проект на peewee, разрабы нахваливают. Алхимию и Джанго ОРМ они уже прошли.

Egor2010
Почему не работает?
Потому что нужно не просто копипастить, а разбираться. Для начала - распечатайте содержимое cursor.description, проведите так сказать его интроспекцию, поймите как он устроен… иначе ничего не получится.

Офлайн

#6 Апрель 17, 2015 13:11:50

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Python mysql {'колонка':'значение'}

Egor2010
Как сделать так чтобы я получал данные в таком формате {'колонка':'значение'}?
Ка обычно - курить маны. DictCursor
cursor = db.cursor(MySQLdb.cursors.DictCursor)



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Отредактировано PooH (Апрель 17, 2015 13:12:20)

Офлайн

#7 Апрель 17, 2015 17:00:38

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

Python mysql {'колонка':'значение'}

Suguby27
Алхимию и Джанго ОРМ они уже прошли.

Насчет алхимии очень голословное заявление. Алхимия просто более навороченная и не всем это нужно и есть желание туда углубляться. Возможности алхимии в разы превышают возможности peewee. Вообще сложно найти ОРМ с такой огромной функциональностью…

Вы сами можете привести примеры, где peewee будет лучше алхимии? Потому как “кто-то кому-то сказал” я всерьез уже не воспринимаю. Уже “это прошел” А хвалят и джанго ОРМ Это не показатель.

Ну и еще раз повторюсь. Под peewee ничего нет. Ни специальных типов. Ни расширений под формы (типа wtforms-alchemy). Вообще ничего. Миграции страшные как моя жизнь. По скорости там 50 на 50. На каких-то операциях алхимия обходит, на каких-то peewee. А учитывая уровень кастомизации алхимии, то можно, я думаю, 90% тестов выиграть, если понимать, что делаешь. Поэтому тут скорее предпочтение. И простота задач. Замечал, что иногда некоторые вещи в алхимии сделаны мягко говоря специфически. Может это отыграло определенную роль.

Отредактировано 4kpt_III (Апрель 17, 2015 17:24:53)

Офлайн

#8 Апрель 17, 2015 17:32:40

Suguby27
Зарегистрирован: 2015-04-07
Сообщения: 26
Репутация: +  4  -
Профиль   Отправить e-mail  

Python mysql {'колонка':'значение'}

4kpt_III
Вы сами можете привести примеры, где peewee будет лучше алхимии?
Некоторые ездят на БМВ, некоторые - на тойотах, а есть и такие, которые ездят на грузовиках. Чего спорить-то? каждый выбирает себе под задачу и чтобы “удобно было” Главное, что бы была возможность выбрать, правильно?

Офлайн

#9 Апрель 17, 2015 17:41:55

Egor2010
Зарегистрирован: 2014-10-22
Сообщения: 152
Репутация: +  0  -
Профиль   Отправить e-mail  

Python mysql {'колонка':'значение'}

Suguby27
Пытался разобраться в чем проблема.
Так и не понял, подскажите в чем дело.

Офлайн

#10 Апрель 17, 2015 17:42:22

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

Python mysql {'колонка':'значение'}

Suguby27
Главное, что бы была возможность выбрать, правильно?

Вот с этим согласен полностью. Всегда должен быть выбор.

P.S. Просто смутила фраза “уже прошли”. Как будто peewee - это ядреный прорыв в идеологии построения ОРМ, а алхимия это уже так, каменный век. Учитывая мои задачи я пока для себя альтернативы алхимии не вижу. Смотрел уже даже и в сторону PonyORM. Но там вообще печаль. Единственное, чем пока алхимия не балует - это асинхронкой (деклоративно, я имею ввиду). А жаль Все примеры ее использования пока через ее SQLAlchemy Core Expressions.

Отредактировано 4kpt_III (Апрель 17, 2015 17:44:03)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version