| import sqlite3 |
| |
| class Point: |
| def __init__(self, x, y): |
| self.x, self.y = x, y |
| |
| def __repr__(self): |
| return "(%f;%f)" % (self.x, self.y) |
| |
| def adapt_point(point): |
| return "%f;%f" % (point.x, point.y) |
| |
| def convert_point(s): |
| x, y = list(map(float, s.split(";"))) |
| return Point(x, y) |
| |
| # Register the adapter |
| sqlite3.register_adapter(Point, adapt_point) |
| |
| # Register the converter |
| sqlite3.register_converter("point", convert_point) |
| |
| p = Point(4.0, -3.2) |
| |
| ######################### |
| # 1) Using declared types |
| con = sqlite3.connect(":memory:", detect_types=sqlite3.PARSE_DECLTYPES) |
| cur = con.cursor() |
| cur.execute("create table test(p point)") |
| |
| cur.execute("insert into test(p) values (?)", (p,)) |
| cur.execute("select p from test") |
| print("with declared types:", cur.fetchone()[0]) |
| cur.close() |
| con.close() |
| |
| ####################### |
| # 1) Using column names |
| con = sqlite3.connect(":memory:", detect_types=sqlite3.PARSE_COLNAMES) |
| cur = con.cursor() |
| cur.execute("create table test(p)") |
| |
| cur.execute("insert into test(p) values (?)", (p,)) |
| cur.execute('select p as "p [point]" from test') |
| print("with column names:", cur.fetchone()[0]) |
| cur.close() |
| con.close() |