■ 커스텀 데이터 타입을 사용하는 방법을 보여준다.
▶ 예제 코드 (PY)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
import sqlite3 # 사용자 정의 자료형 class Point(object): def __init__(self, x, y): self.x = x self.y = y def __repr__(self): return "Point(%f, %f)" % (self.x, self.y) # 사용자 정의 자료형에서 SQlite3 입력 가능한 자료형으로 변환한다. def PointAdapter(point): return "%f:%f" % (point.x, point.y) # SQLite3에서 조회한 결과를 사용자 정의 자료형으로 변환한다. def PointConverter(source): x, y = list(map(float, source.decode().split(":"))) return Point(x, y) # SQLite3에서 어댑터와 변환자를 등록한다. sqlite3.register_adapter(Point, PointAdapter) sqlite3.register_converter("point", PointConverter) point1 = Point( 4, -3.2) point2 = Point(-1.4, 6.2) # detect_types 인자를 sqlite3.PARSE_DECLTYPES로 설정하여 암묵적으로 선언된 자료형으로 조회하도록 설정한다. connection = sqlite3.connect(":memory:", detect_types = sqlite3.PARSE_DECLTYPES) cursor = connection.cursor() cursor.execute("CREATE TABLE TABLE1 (LOCATION POINT);") cursor.execute("INSERT INTO TABLE1 VALUES (?);", (point1, )) cursor.execute("INSERT INTO TABLE1 VALUES (?);", (point2, )) cursor.execute("SELECT * FROM TABLE1") for rowTuple in cursor: print(rowTuple) print() """ (Point(4.000000, -3.200000),) (Point(-1.400000, 6.200000),) """ |