mirror of
				https://github.com/python/cpython.git
				synced 2025-11-02 14:41:33 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			47 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
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)).encode('ascii')
 | 
						|
 | 
						|
def convert_point(s):
 | 
						|
    x, y = list(map(float, s.split(b";")))
 | 
						|
    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()
 |