Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 26, 2008 10:43:12

axe
От:
Зарегистрирован: 2008-08-07
Сообщения: 256
Репутация: +  0  -
Профиль   Отправить e-mail  

mysqldb отображение datetime

делаю запрос к БД через mysqldb. в результате запроса присутствуют данные вида:

datetime.datetime(2008, 1, 5, 18, 15, 30)
можно ли указать формат вывода даты, т.е. чтоб на выходе была строка?



Офлайн

#2 Авг. 26, 2008 11:15:07

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

mysqldb отображение datetime

покажи запрос
PS в mysql не знаю, но pgsql есть функция to_char, используя которую можно переводить датавремя в строку заданого формата.
select to_char(now(), ‘DD.MM.YYYY HH:MI:SS’)

посмотри в mysql аналог



Офлайн

#3 Авг. 26, 2008 11:33:41

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

mysqldb отображение datetime

код в mysql
SELECT CAST( NOW( ) AS CHAR )



Офлайн

#4 Авг. 26, 2008 11:45:24

axe
От:
Зарегистрирован: 2008-08-07
Сообщения: 256
Репутация: +  0  -
Профиль   Отправить e-mail  

mysqldb отображение datetime

    c_query = "select * from `user`"
c_Connect = MySQLdb.connect( host=c_host, db=c_database, user=c_user )
c_Cursor = c_Connect.cursor()
c_Cursor.execute( c_query )
c_Result = c_Cursor.fetchone()
(4L, datetime.datetime(2008, 1, 5, 18, 15, 30), ‘John’, None, 1)
как изменить запрос - не понял.



Офлайн

#5 Авг. 26, 2008 13:39:27

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

mysqldb отображение datetime

А зачем? просто приведите результат к нужной строке уже на клиенте

c_Result[1].strftime("%d.%m.%Y %H:%M")



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

Офлайн

#6 Авг. 26, 2008 13:59:46

axe
От:
Зарегистрирован: 2008-08-07
Сообщения: 256
Репутация: +  0  -
Профиль   Отправить e-mail  

mysqldb отображение datetime

в моём случае python должен только передавать данные, а не работать с ними.
т.е. обработки данных надо свести к минимуму

тут http://megalib.com/books/129/glava05.htm пишут:

Если Вы имеете установленный пакет mx.DateTime , MySQLdb использует его для связанных с датой объектов. Иначе они будут возвращены как строки. Вы можете также изменять словарь преобразования типов, чтобы возвратить их как другие объектные классы.
похоже, что у меня этот пакет установлен :)

не понятно, что это за словарь преобразования типов, как его менять.



Офлайн

#7 Авг. 26, 2008 17:11:13

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

mysqldb отображение datetime

попробуй код в mysql
SELECT cast( DATE_FORMAT( NOW( ) , ‘%d.%m.%Y’ ) AS char ) ;



Офлайн

#8 Авг. 27, 2008 11:13:52

axe
От:
Зарегистрирован: 2008-08-07
Сообщения: 256
Репутация: +  0  -
Профиль   Отправить e-mail  

mysqldb отображение datetime

pythonwin, не понятно.
если выполнить

    c_Cursor.execute( "SELECT cast( DATE_FORMAT( NOW( ) , '%d.%m.%Y' ) AS char )" )
то результатом будет просто сегодняшняя дата. да, она будет возвращена в виде строки, но нужно все даты, которые записаны в таблицах БД возвращать в python в виде строк.

обратил внимание, что вместе с классом connect инициализируются дополнительные функции:
    c_Connect.encoders[datetime.datetime]( datetime.datetime(2008, 1, 5, 18, 15, 30), None )
выдаёт строку ‘2008-01-05 18:15:30’

как указать курсору, что он должен использовать функцию c_Connect.encoders (она же DateTime2literal) ?



Офлайн

#9 Авг. 27, 2008 11:33:11

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

mysqldb отображение datetime

Это вам как пример привели. Поставте вместо NOW() в запросе имя нужного поля. А использование “*” в селектах вообще-то плохой тон ;)



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

Офлайн

#10 Авг. 27, 2008 13:42:49

axe
От:
Зарегистрирован: 2008-08-07
Сообщения: 256
Репутация: +  0  -
Профиль   Отправить e-mail  

mysqldb отображение datetime

понятно. тем временем нашёл правильное решение.

в MySQLdb.connect.encoders содержится набор правил для преобразования результатов запросов.
правила можно менять, по умолчанию они наследуются из MySQLdb.converters.conversions

т.е. если написать:

conv = MySQLdb.converters.conversions
c_Connect = MySQLdb.connect( host=c_host, db=c_database, user=c_user, conv=conv1 )
то ничего не изменится :)

если написать
c_Connect = MySQLdb.connect( host=c_host, db=c_database, user=c_user, conv={} )
то все правила для преобразования результатов запросов будут отменены!

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



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version