Найти - Пользователи
Полная версия: Python mysql {'колонка':'значение'}
Начало » Python для новичков » Python mysql {'колонка':'значение'}
1 2
Egor2010
Как сделать так чтобы я получал данные в таком формате {'колонка':'значение'}?
Колонка это имя колонки из базы
Сейчас я получаю данные к примеру так 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
Suguby27
у курсора после выполнения запроса есть атрибут 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/ хвалят
4kpt_III
Suguby27

С peewee никто не сотрудничает толком. Под нее практически ничего нет Поэтом есть два варианта: или тормознутый джанговский ОРМ, или немного сложнее в понимании sqlalchemy. Peewee пока не вариант.
Egor2010
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'
Почему не работает?
Suguby27
4kpt_III
Suguby27С peewee никто не сотрудничает толком. Под нее практически ничего нет Поэтом есть два варианта: или тормознутый джанговский ОРМ, или немного сложнее в понимании sqlalchemy. Peewee пока не вариант.

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

Egor2010
Почему не работает?
Потому что нужно не просто копипастить, а разбираться. Для начала - распечатайте содержимое cursor.description, проведите так сказать его интроспекцию, поймите как он устроен… иначе ничего не получится.
PooH
Egor2010
Как сделать так чтобы я получал данные в таком формате {'колонка':'значение'}?
Ка обычно - курить маны. DictCursor
cursor = db.cursor(MySQLdb.cursors.DictCursor)
4kpt_III
Suguby27
Алхимию и Джанго ОРМ они уже прошли.

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

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

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

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

P.S. Просто смутила фраза “уже прошли”. Как будто peewee - это ядреный прорыв в идеологии построения ОРМ, а алхимия это уже так, каменный век. Учитывая мои задачи я пока для себя альтернативы алхимии не вижу. Смотрел уже даже и в сторону PonyORM. Но там вообще печаль. Единственное, чем пока алхимия не балует - это асинхронкой (деклоративно, я имею ввиду). А жаль Все примеры ее использования пока через ее SQLAlchemy Core Expressions.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB