datetime(2018,3,8,10,29,49,178285)在python中不能用psycopg2序列化JSON
我已使用以下代码在postgresql中创建了一个表:datetime(2018,3,8,10,29,49,178285)在python中不能用psycopg2序列化JSON,python,postgresql,datetime,psycopg2,jsonb,Python,Postgresql,Datetime,Psycopg2,Jsonb,我已使用以下代码在postgresql中创建了一个表: create table spyResults (id serial not null primary key, info jsonb not null); 现在,在Python中,我想将数据插入到该表中。我使用以下代码传递数据: cur.execute("INSERT INTO %s(info) VALUES (%s)",[AsIs('spyResults'),json.dumps(pDoc)]) pDoc是Python字典,现在我将
create table spyResults (id serial not null primary key, info jsonb not null);
现在,在Python中,我想将数据插入到该表中。我使用以下代码传递数据:
cur.execute("INSERT INTO %s(info) VALUES (%s)",[AsIs('spyResults'),json.dumps(pDoc)])
pDoc
是Python字典,现在我将其转换为json
并传递到查询,但问题在于我们拥有的pDoc
字典:
datetime.datetime(2018, 3, 8, 10, 29, 49, 178285) also
当我尝试插入时,出现以下错误:
datetime.datetime(2018, 3, 8, 10, 29, 49, 178285) is not JSON serializable
请建议如何解决这个问题。谢谢
编辑:这不是重复的问题,因为我们没有得到datetime对象,而不是作为参数,它在字典中附带,我们能够将pDoc asis插入mongodb,我希望postgreSQL也是如此。
json
无法直接序列化日期。最简单的解决方案是传递datetime
对象或字符串,这可以通过your\u datetime\u object.isoformat()实现
或使用strftime
方法,如果您希望使用不同的格式。已编辑,请再次检查并确认。但在postgreSQL时间戳中,时间戳存储为字符串,但如果我们要查询日期,我们如何才能做到这一点,例如大于当前日期或小于其他日期?您可以从Python中查询数据库,如下所示:cur.execute(“从my_表中选择*其中my_日期>(%s)”,datetime.date(2018,03,09))
。只要格式与日期列期望的格式相匹配,则传递字符串也应该有效。