我们从Python开源项目中,提取了以下50个代码示例,用于说明如何使用psycopg2.extras.register_range()。
def test_register_range_adapter(self): from psycopg2.extras import Range, register_range cur = self.conn.cursor() cur.execute("create type textrange as range (subtype=text)") rc = register_range('textrange', 'TextRange', cur) TextRange = rc.range self.assertTrue(issubclass(TextRange, Range)) self.assertEqual(TextRange.__name__, 'TextRange') r = TextRange('a', 'b', '(]') cur.execute("select %s", (r,)) r1 = cur.fetchone()[0] self.assertEqual(r1.lower, 'a') self.assertEqual(r1.upper, 'b') self.assertTrue(not r1.lower_inc) self.assertTrue(r1.upper_inc) cur.execute("select %s", ([r, r, r],)) rs = cur.fetchone()[0] self.assertEqual(len(rs), 3) for r1 in rs: self.assertEqual(r1.lower, 'a') self.assertEqual(r1.upper, 'b') self.assertTrue(not r1.lower_inc) self.assertTrue(r1.upper_inc) # clear the adapters to allow precise count by scripts/refcounter.py del ext.adapters[rc.range, ext.ISQLQuote]
def test_range_not_found(self): from psycopg2.extras import register_range cur = self.conn.cursor() self.assertRaises(psycopg2.ProgrammingError, register_range, 'nosuchrange', 'FailRange', cur)
def test_schema_range(self): cur = self.conn.cursor() cur.execute("create schema rs") cur.execute("create type r1 as range (subtype=text)") cur.execute("create type r2 as range (subtype=text)") cur.execute("create type rs.r2 as range (subtype=text)") cur.execute("create type rs.r3 as range (subtype=text)") cur.execute("savepoint x") from psycopg2.extras import register_range ra1 = register_range('r1', 'r1', cur) ra2 = register_range('r2', 'r2', cur) rars2 = register_range('rs.r2', 'r2', cur) rars3 = register_range('rs.r3', 'r3', cur) self.assertNotEqual( ra2.typecaster.values[0], rars2.typecaster.values[0]) self.assertRaises(psycopg2.ProgrammingError, register_range, 'r3', 'FailRange', cur) cur.execute("rollback to savepoint x;") self.assertRaises(psycopg2.ProgrammingError, register_range, 'rs.r1', 'FailRange', cur) cur.execute("rollback to savepoint x;") # clear the adapters to allow precise count by scripts/refcounter.py for r in [ra1, ra2, rars2, rars3]: del ext.adapters[r.range, ext.ISQLQuote]
def test_register_range_adapter(self): from psycopg2.extras import Range, register_range cur = self.conn.cursor() cur.execute("create type textrange as range (subtype=text)") rc = register_range('textrange', 'TextRange', cur) TextRange = rc.range self.assert_(issubclass(TextRange, Range)) self.assertEqual(TextRange.__name__, 'TextRange') r = TextRange('a', 'b', '(]') cur.execute("select %s", (r,)) r1 = cur.fetchone()[0] self.assertEqual(r1.lower, 'a') self.assertEqual(r1.upper, 'b') self.assert_(not r1.lower_inc) self.assert_(r1.upper_inc) cur.execute("select %s", ([r, r, r],)) rs = cur.fetchone()[0] self.assertEqual(len(rs), 3) for r1 in rs: self.assertEqual(r1.lower, 'a') self.assertEqual(r1.upper, 'b') self.assert_(not r1.lower_inc) self.assert_(r1.upper_inc) # clear the adapters to allow precise count by scripts/refcounter.py del ext.adapters[rc.range, ext.ISQLQuote]
def test_register_range_adapter(self): from psycopg2.extras import Range, register_range cur = self.conn.cursor() cur.execute("create type textrange as range (subtype=text)") rc = register_range('textrange', 'TextRange', cur) TextRange = rc.range self.assert_(issubclass(TextRange, Range)) self.assertEqual(TextRange.__name__, 'TextRange') r = TextRange('a', 'b', '(]') cur.execute("select %s", (r,)) r1 = cur.fetchone()[0] self.assertEqual(r1.lower, 'a') self.assertEqual(r1.upper, 'b') self.assert_(not r1.lower_inc) self.assert_(r1.upper_inc) cur.execute("select %s", ([r,r,r],)) rs = cur.fetchone()[0] self.assertEqual(len(rs), 3) for r1 in rs: self.assertEqual(r1.lower, 'a') self.assertEqual(r1.upper, 'b') self.assert_(not r1.lower_inc) self.assert_(r1.upper_inc) # clear the adapters to allow precise count by scripts/refcounter.py del ext.adapters[rc.range, ext.ISQLQuote]
def test_register_range_adapter(self): from psycopg2.extras import Range, register_range cur = self.conn.cursor() cur.execute("create type textrange as range (subtype=text)") rc = register_range('textrange', 'TextRange', cur) TextRange = rc.range self.assertTrue(issubclass(TextRange, Range)) self.assertEqual(TextRange.__name__, 'TextRange') r = TextRange('a', 'b', '(]') cur.execute("select %s", (r,)) r1 = cur.fetchone()[0] self.assertEqual(r1.lower, 'a') self.assertEqual(r1.upper, 'b') self.assertTrue(not r1.lower_inc) self.assertTrue(r1.upper_inc) cur.execute("select %s", ([r,r,r],)) rs = cur.fetchone()[0] self.assertEqual(len(rs), 3) for r1 in rs: self.assertEqual(r1.lower, 'a') self.assertEqual(r1.upper, 'b') self.assertTrue(not r1.lower_inc) self.assertTrue(r1.upper_inc) # clear the adapters to allow precise count by scripts/refcounter.py del ext.adapters[rc.range, ext.ISQLQuote]
def test_range_escaping(self): from psycopg2.extras import register_range cur = self.conn.cursor() cur.execute("create type textrange as range (subtype=text)") rc = register_range('textrange', 'TextRange', cur) TextRange = rc.range cur.execute(""" create table rangetest ( id integer primary key, range textrange)""") bounds = ['[)', '(]', '()', '[]'] ranges = [TextRange(low, up, bounds[i % 4]) for i, (low, up) in enumerate(zip( [None] + list(map(chr, list(range(1, 128)))), list(map(chr, list(range(1, 128)))) + [None], ))] ranges.append(TextRange()) ranges.append(TextRange(empty=True)) errs = 0 for i, r in enumerate(ranges): # not all the ranges make sense: # fun fact: select ascii('#') < ascii('$'), '#' < '$' # yelds... t, f! At least in en_GB.UTF-8 collation. # which seems suggesting a supremacy of the pound on the dollar. # So some of these ranges will fail to insert. Be prepared but... try: cur.execute(""" savepoint x; insert into rangetest (id, range) values (%s, %s); """, (i, r)) except psycopg2.DataError: errs += 1 cur.execute("rollback to savepoint x;") # ...not too many errors! in the above collate there are 17 errors: # assume in other collates we won't find more than 30 self.assertTrue(errs < 30, "too many collate errors. Is the test working?") cur.execute("select id, range from rangetest order by id") for i, r in cur: self.assertEqual(ranges[i].lower, r.lower) self.assertEqual(ranges[i].upper, r.upper) self.assertEqual(ranges[i].lower_inc, r.lower_inc) self.assertEqual(ranges[i].upper_inc, r.upper_inc) self.assertEqual(ranges[i].lower_inf, r.lower_inf) self.assertEqual(ranges[i].upper_inf, r.upper_inf) # clear the adapters to allow precise count by scripts/refcounter.py del ext.adapters[TextRange, ext.ISQLQuote]