cpython/Doc/includes/sqlite3/converter_point.py

41 lines
1.1 KiB
Python
Raw Normal View History

2007-08-15 14:28:22 +00:00
import sqlite3
class Point:
2007-08-15 14:28:22 +00:00
def __init__(self, x, y):
self.x, self.y = x, y
def __repr__(self):
return f"Point({self.x}, {self.y})"
2007-08-15 14:28:22 +00:00
def adapt_point(point):
return f"{point.x};{point.y}".encode("utf-8")
2007-08-15 14:28:22 +00:00
def convert_point(s):
x, y = list(map(float, s.split(b";")))
2007-08-15 14:28:22 +00:00
return Point(x, y)
# Register the adapter and converter
2007-08-15 14:28:22 +00:00
sqlite3.register_adapter(Point, adapt_point)
sqlite3.register_converter("point", convert_point)
# 1) Parse using declared types
2007-08-15 14:28:22 +00:00
p = Point(4.0, -3.2)
con = sqlite3.connect(":memory:", detect_types=sqlite3.PARSE_DECLTYPES)
cur = con.execute("create table test(p point)")
2007-08-15 14:28:22 +00:00
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()
# 2) Parse using column names
2007-08-15 14:28:22 +00:00
con = sqlite3.connect(":memory:", detect_types=sqlite3.PARSE_COLNAMES)
cur = con.execute("create table test(p)")
2007-08-15 14:28:22 +00:00
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()