Import Python Weekly Newsletter Issue 10 is out –

 
Ankur Gupta

Import Python Weekly Newsletter Issue 10 is out – http://importpython.com [ click archive ] #python #ipython #nginx #machinelearning #pydata #django Subscribe to receive the newsletter …

Advertisements

django-import-export를 통해서 admin 페이지에 DB integratio

 
하준수

django-import-export를 통해서 admin 페이지에 DB integration 기능을 추가했는데, .csv 포맷의 파일에서 한글 (utf-8 unicode 인코딩) 을 읽어올 때 mysqldb 컨넥터에서 invalid string이라면서 에러가 뜹니다.

조사해보니 mysqldb에서 쿼리문을 default로 latin-1 인코딩으로 인식한다고 해서, 이를 mysqldb 모듈을 import한 후에 연결할 때 utf-8로 설정해주는 방식으로 해결한 사람이 있더라구요

http://www.dasprids.de/blog/2007/12/17/python-mysqldb-and-utf-8

db.set_character_set(‘utf8’)
dbc.execute(‘SET NAMES utf8;’)
dbc.execute(‘SET CHARACTER SET utf8;’)
dbc.execute(‘SET character_set_connection=utf8;’)

django에서 바로 쓸 수 있도록 mysqldb default 인코딩을 코드상에서 해결할 수 있는 방법은 없을까요?

mysqldb와 django 기반으로 개발하시는 분들은 한글 데이터 DB 입력문제 어떻게 해결하시는지요?

  • Kyeong-Mook Kay Cha

    저는 django settings.py에서
    DATABASE_OPTIONS = {“charset”:”uft8″}
    설정하고, mysql에서 db의 default charset을 utf8로 설정해서 생성하고, mysql client와 mysqld의 charset을 utf8로 설정(my.cnf)합니다. my.cnf에서 하는 설정이 저 utf8 관련 mysql query를 실행하는 내용을 담고 있지요.

    Chinseok Lee

    저는 mysql 은 디폴트 설정에서 database 생성시에 charset=utf8 로 생성만 하면, 별 다른 설정없이 잘 썼었습니다.
    mysql> create database default charset=utf8;

    django 에서는 mysql 연결시에 디폴트로 utf8 로 연결하기 때문에, 별 다른 설정을 하지 않았습니다.

    한글은 django 내에서는 유니코드로만 처리합니다. 그럼 db 연결시에 알아서 지정된 인코딩으로 변환이 됩니다.

    하준수

    아 my.conf에서 그냥 설정해주면 되는거였군요 감사합니다!! 컨넥터에서 에러 뜨길래 컨넥터 문제인 줄 알았는데 DB 인코딩 설정 문제였네요 정말 감사합니다

django 프로젝트를 새로 생성할 때마다 귀찮은 일 중에 하나가 db 셋업하는 것인데요.

 
박영록

django 프로젝트를 새로 생성할 때마다 귀찮은 일 중에 하나가 db 셋업하는 것인데요. 혹시 데비안의 dbconfig 같은 툴이 cross platform으로 되는 건 없을까요? settings.py 읽어서 자동으로 촤르륵 세팅해주면 좋겠다는 생각이 드네요.

  • Park Eungju

    http://docs.ansible.com/postgresql_db_module.html Ansible의 DB 모듈들이 비슷한 기능이 있네요.

    박영록

    오오, 제가 궁극적으로 만들려고 했었던 툴과 동일한 목적으로 만든 툴이군요. 감사합니다.

스팸게시물이 계속 올라오네요. 그룹멤버에 베트남 쪽 스팸계정이 있는 듯 합니다. ㅠ_ㅠ d

 
Chinseok Lee

스팸게시물이 계속 올라오네요. 그룹멤버에 베트남 쪽 스팸계정이 있는 듯 합니다. ㅠ_ㅠ dong.sen.587

  • Daniel Kim

    뭔가 했더니 바로 밑에 ㅋㅋㅋ

    Seo Jeongmin

    엌ㅋㅋㅋㅋ

    Chinseok Lee

    아이디 : quy.vivanquy.7 ㅠ_ㅠ

    Joong-Hyeon Kim

    요즘 들어서 이런 스팸게시물이 제가 가입한 그룹에 제법 많이 올라와요..ㅜ.ㅠ

http://sorl-thumbnail.readthedocs.org/en/latest/in

 
Daniel Kim

http://sorl-thumbnail.readthedocs.org/en/latest/index.html

이 앱 documentation이 너무 빈약하다고 생각하는거 저뿐인가요?
물론 무료로 가져다 쓰는 입장에서 이래라 저래라 할수는없지만 제대로 설명이 안되있어서 그런지 쓰기가 참 힘드네요 ㅠㅠ

  • Chinseok Lee

    소스레벨까지 자세히 설명되어있진 않지만, sorl-thumbnail 을 쓰기 위한 좋은 진입점을 제공해주고 있다고 생각합니다. // 오픈소스는 소스코드라는 좋은 문서가 있지 않습니까 🙂

    Daniel Kim

    그러게요 ㅠㅠ 처음으로 소스 까서 보고 있는데 눕눕이라 잘 이해가 안가는게 함정..

    최명규

    머하는건가요? 첨보는건데

    Chinseok Lee

    최명규 : 썸네일 생성 라이브러리 입니다.

구글맵 위젯을 쓸려고 커스텀 GeometryWidget 만들면서, Web Mercator

 
Chinseok Lee

구글맵 위젯을 쓸려고 커스텀 GeometryWidget 만들면서, Web Mercator 로서 map_srid 를 900913 로 지정해서 만들었습니다. 그런데 form 의 validation 이 실패하더군요. 에러메세지는 형식이 틀렸다고만 알려주더군요. 물론 기본 widget 으로는 잘 되구요.

테스트환경 : 우분투 14.04LTS, apt 로 geodjango + postgresql + postgis + gdal 설치

에러를 추적해서, 다음 메세지를 찾았습니다.
GDAL_ERROR 6: EPSG PCS/GCS code 900913 not found in EPSG support files. Is this a valid EPSG coordinate sysetm?

1) db 의 spatial_ref_sys 테이블을 확인해보니, 900913 이 잘 들어있습니다.

2) Web Mercator 에 대해 900913 을 쓰기도 하지만, 공식적으로는 3857 이더군요. map_srid 를 3857 로 하면 잘 됩니다. 그런데, 900913 이 왜 안되는 지 궁금합니다.

3) django 소스코드를 까보니, gdal 이 가용할 때 3857 을 쓰고 폴백으로 900913 을 쓰도록 되어있네요.
https://github.com/django/django/blob/master/django/contrib/gis/forms/widgets.py#L115

4) 개발머신 (맥) 에 설치된 Postgres.app 에서는 잘 되었었습니다. 맥머신과 우분투머신을 비교해보니, share/gdal 의 wkt 구성이 다르더군요. (gdal 버전은 동일했습니다.) 다른 파일 중에 cubewerx_extra.wkt 파일에 900913 명세가 있는 것을 확인했습니다. cubewerx_extra.wkt 파일을 우분투머신에 적용하니, widget 의 map_srid 를 900913 으로 적용해도 잘 됩니다.
https://github.com/gwaldron/godzi-web-control/blob/master/3rdParty/gdal-1.6.0/data/cubewerx_extra.wkt#L48

—-
결론 : Web Mercator 을 적용하실 때에는, 필히 공식 map_srid 인 3857 로 적용해주세요. 900913 로 지정된 좌표를 처리하셔야 될 때에는, cubewerx_extra.wkt 파일을 체크해보세요.