@@ -36,7 +36,7 @@ use datafusion::prelude::*;
3636use pyo3:: exceptions:: { PyTypeError , PyValueError } ;
3737use pyo3:: prelude:: * ;
3838use pyo3:: pybacked:: PyBackedStr ;
39- use pyo3:: types:: { PyCapsule , PyTuple } ;
39+ use pyo3:: types:: { PyCapsule , PyTuple , PyTupleMethods } ;
4040use tokio:: task:: JoinHandle ;
4141
4242use crate :: errors:: py_datafusion_err;
@@ -73,14 +73,14 @@ impl PyDataFrame {
7373 if let Ok ( key) = key. extract :: < PyBackedStr > ( ) {
7474 // df[col]
7575 self . select_columns ( vec ! [ key] )
76- // } else if let Ok(tuple) = key.extract::<& PyTuple>() {
77- // @todo: make this branch work
78- // // df[col1, col2, col3]
79- // let keys = tuple
80- // .iter()
81- // .map(|item| item.extract::<PyBackedStr>())
82- // .collect::<PyResult<Vec<PyBackedStr>>>()?;
83- // self.select_columns(keys)
76+ } else if let Ok ( tuple) = key. extract :: < Py < PyTuple > > ( ) {
77+ // df[col1, col2, col3]
78+ let tuple = tuple . bind ( key . py ( ) ) ;
79+ let keys = tuple
80+ . iter ( )
81+ . map ( |item| item. extract :: < PyBackedStr > ( ) )
82+ . collect :: < PyResult < Vec < PyBackedStr > > > ( ) ?;
83+ self . select_columns ( keys)
8484 } else if let Ok ( keys) = key. extract :: < Vec < PyBackedStr > > ( ) {
8585 // df[[col1, col2, col3]]
8686 self . select_columns ( keys)
0 commit comments