Analitycs

Показаны сообщения с ярлыком mysql. Показать все сообщения
Показаны сообщения с ярлыком mysql. Показать все сообщения

суббота, 8 октября 2011 г.

Ошибка - Невозможно подключиться к базе данных QMYSQL (Mac, Python, Qt)

Симптомы

При запуске Qt приложения с MySQL ошибка "Невозможно подключиться к базе данных QMYSQL".

Причина

Отсутствие драйвера MySQL "из коробки" в каких-то вариантах Qt. Почему-то по умолчанию включают только SQLite.

Как лечить?

Скомпилировать драйвер самостоятельно, для чего умные люди написали вот такой скриптик.

Разумеется, не забываем поправить необходимую версию Qt и проверить, чтобы в путях не было пробелов. (У меня в username есть пробел, из-за чего время от времени ловлю различные проблемы с компиляторами)

понедельник, 3 октября 2011 г.

Как просмотреть битовые поля(bit fields) в MySQL?

Когда вы используете в таблицах MySQL битовые поля,  то стандартный консольный клиент их не показывает в результатах запросов.

mysql> select deleted from shopping_cart where id > 1000 and deleted = 0 limit 3;
+---------+
| deleted |
+---------+
|         | 
|         | 
|         | 
+---------+
3 rows in set (0.00 sec)

mysql> select deleted from shopping_cart where id > 1000 and deleted = 1 limit 3;
+---------+
| deleted |
+---------+
|        | 
|        | 
|        | 
+---------+
3 rows in set (0.00 sec)

Внимательный человек заметит, что у результатов команды отличается отступ.

Для того чтоб значение поля было показано явно, нужно в запросе либо добавить +0 к имени поля, либо вызвать функцию bin, как показано ниже.

mysql> select deleted+0 from shopping_cart where id > 1000 and deleted = 0 limit 3;
+-----------+
| deleted+0 |
+-----------+
|         0 | 
|         0 | 
|         0 | 
+-----------+
3 rows in set (0.36 sec)

mysql> select deleted+0 from shopping_cart where id > 1000 and deleted = 1 limit 3;
+-----------+
| deleted+0 |
+-----------+
|         1 | 
|         1 | 
|         1 | 
+-----------+
3 rows in set (0.01 sec)

mysql> select bin(deleted) from shopping_cart where id > 1000 and deleted = 1 limit 3;
+--------------+
| bin(deleted) |
+--------------+
|            1 | 
|            1 | 
|            1 | 
+--------------+
3 rows in set (0.01 sec)

mysql> select id,bin(deleted) from shopping_cart where id > 2000 and deleted = 0 limit 3;
+------+--------------+
| id   | bin(deleted) |
+------+--------------+
| 2001 | 0            | 
| 2002 | 0            | 
| 2003 | 0            | 
+------+--------------+
3 rows in set (0.00 sec)

Ну очень вольный перевод вот этого мана

четверг, 15 сентября 2011 г.

Как исправить ошибку Python datetime.datetime() is not JSON serializable?

Немного о сериализации через simplejson даты/времени, полученной из MySQL

При попытке сдампить результат из fetchall - чтобы отдать данные наружу во фронтендовский в Javascript в стиле

            sql  ='SELECT * FROM xxx WHERE id=%d'                                                          
            self._query(sql % id)
            data = self._cursor.fetchall()

получаем Exception

datetime.datetime(2011, 9, 14, 10, 18, 57) is not JSON serializable

Исправляется дополнительным форматом через лямбда-функцию

            dthandler = lambda obj: obj.isoformat() if isinstance(obj, datetime) else None
            response = json.dumps(data, ensure_ascii=False, default=dthandler)
Найдено, как водится - на StackOverflow

среда, 7 сентября 2011 г.

Python+MySQL+Bit fields = Error: invalid literal for int() with base 10: '\x01'

Причина - не нужно сравнивать значения, полученные из битового поля MySQL сразу с  int значениями - 0 и 1.

Методически грамотно - преобразовывать:

if int(result) != ord(row['bit_filed']):
    bla-bla-bla

Как вставить копию данных в ту же самую таблицу MySQL с изменениями?

Ну лень мне было перебивать несколько сотен записей в таблице "ручками", а потом еще их и менять. А лень, как известно - двигатель прогресса.

INSERT INTO megatable (id, server_name, server_ip, type, params, notification, account_id, status, is_active) SELECT 0, server_name, server_ip, 'ping', params, notification, account_id, status, is_active FROM megatable;

Работает ли на других диалектах? - мне не ведомо... ;-)

понедельник, 22 августа 2011 г.

Нет коннекта к MySQL сразу после установки - Host 'MachineName' is not allowed to connect to this MySql Server

MySQL по умолчанию ставится в "закукленном" состоянии без доступа снаружи - что бы открыть доступ снаружи, нужно в конфиге /etc/my.cnf заменить

#bind-address           = 127.0.0.1
bind-address = 0.0.0.0

ну или какой там нужный IP и открыть доступ для нужного пользователя MySQL

GRANT ALL PRIVILEGES ON *.* TO root@'hostname' IDENTIFIED BY 'root-password' 

P.S. Да, разумеется - это все для девелоперских машин - на публичных это делать не рекомендуется.