首页 > 解决方案 > 如何使用 SQLAlchemy + Postgres 使上限包含在内

问题描述

我的专栏看起来像:

Class School(db.model):
    year = db.Column(INT4RANGE, nullable=False) 

当我承诺时:

y = NumericRange(2020,2021,'[]')
school = School(year=y)
db.session.add(school)
db.session.commit()

但是当我查询它显示的列时:

[2020,2021)

为什么会这样?为了过滤,我需要它包含下限和上限。

标签: postgresqlsqlalchemyrangepsycopg2

解决方案


我没有安装 SQLAlchemy,但这是我看到的:

create table integer_range(range_field int4range);
insert into integer_range values (int4range(2020, 2021, '[]'));
insert into integer_range values (int4range(2020, 2021, '[)'));
insert into integer_range values (int4range(2019, 2020, '[)'));

在 Python 中:

import psycopg2
from psycopg2.extras import NumericRange
con = psycopg2.connect("dbname=test user=aklaver host=localhost port=5442") 
cur = con.cursor() 
cur.mogrify("select * from integer_range where range_field = %s", (NumericRange(2020,2021,'[]'),))                                                                                                                      
b"select * from integer_range where range_field = '[2020,2021]'"
cur.execute("select * from integer_range where range_field = %s", (NumericRange(2020,2021,'[]'),)) 
rs = cur.fetchall() 
rs[0]                                                                                                                                                                                                                   
(NumericRange(2020, 2022, '[)'),)

所以它的工作原理与 psycopg2 ene 一样。


推荐阅读