diff --git a/backend/app/db.py b/backend/app/db.py
index 4272cb4..21fbe03 100644
--- a/backend/app/db.py
+++ b/backend/app/db.py
@@ -1,6 +1,6 @@
 import os
 from dotenv import load_dotenv
-from psycopg2 import connect
+from psycopg import connect
 
 load_dotenv()
 
diff --git a/backend/app/get_travel_time.py b/backend/app/get_travel_time.py
index cea4007..2f7d2c8 100644
--- a/backend/app/get_travel_time.py
+++ b/backend/app/get_travel_time.py
@@ -23,9 +23,9 @@ def get_travel_time(start_node, end_node, start_time, end_time, start_date, end_
                 SUM(cn.unadjusted_tt) AS corr_hourly_daily_tt
             FROM congestion.network_segments_daily AS cn
             WHERE   
-                cn.segment_id::integer IN %(seglist)s
+                cn.segment_id::integer = ANY(%(seglist)s)
                 AND cn.hr <@ %(time_range)s::numrange
-                AND date_part('ISODOW', cn.dt)::integer IN %(dow_list)s
+                AND date_part('ISODOW', cn.dt)::integer = ANY(%(dow_list)s)
                 AND cn.dt <@ %(date_range)s::daterange 
                 {tt_holiday_clause}
             GROUP BY
@@ -55,9 +55,9 @@ def get_travel_time(start_node, end_node, start_time, end_time, start_date, end_
         SELECT SUM( ((length / 1000.0) / mean) * sample_size ) AS probe_hours
         FROM here.ta_path
         WHERE
-            link_dir IN %(link_dir_list)s
+            link_dir = ANY(%(link_dir_list)s)
             AND dt <@ %(date_range)s::daterange
-            AND EXTRACT(ISODOW FROM dt)::integer IN %(dow_list)s
+            AND EXTRACT(ISODOW FROM dt)::integer = ANY(%(dow_list)s)
             AND EXTRACT(HOUR FROM tod)::numeric <@ %(time_range)s::numrange
             {sample_holiday_clause}
     """
@@ -66,14 +66,14 @@ def get_travel_time(start_node, end_node, start_time, end_time, start_date, end_
 
     query_params = {
         "length_m": sum([link['length_m'] for link in links]),
-        "seglist": tuple(set([link['segment_id'] for link in links])),
-        "link_dir_list": tuple([link['link_dir'] for link in links]),
+        "seglist": list(set([link['segment_id'] for link in links])),
+        "link_dir_list": [link['link_dir'] for link in links],
         "node_start": start_node,
         "node_end": end_node,
         # this is where we define that the end of the range is exclusive
         "time_range": f"[{start_time},{end_time})", # ints
         "date_range": f"[{start_date},{end_date})", # 'YYYY-MM-DD'
-        "dow_list": tuple(dow_list)
+        "dow_list": dow_list
     }
 
     connection = getConnection()
diff --git a/backend/requirements.txt b/backend/requirements.txt
index 34d7abc..709e9a6 100644
--- a/backend/requirements.txt
+++ b/backend/requirements.txt
@@ -3,5 +3,5 @@ flask==2.2.2
 flask_cors==3.0.10
 gunicorn==20.1.0
 packaging==20.7
-psycopg2==2.9.6
+psycopg==3.1.18
 python-dotenv==0.15.0
\ No newline at end of file