Patched _safe_fetch to ensure a list of tuples is returned.
When MSSQL is used via pyodbc, Cursor.fetchall() returns a list of pyodbc.Row instances.  This just casts the rows as tuples so they don't give a TypeError in DataFrame.from_records.

@aman-thakral i took an alternate approach in the above commit that will not result in performance problems for other use cases. this will be in 0.7.2--  let me know if you have any more issues
 This is still happening as of 0.11.0, 

---

TypeError                                 Traceback (most recent call last)
/home/user/<ipython-input-29-ef2471aa99a1> in <module>()
      1 conn = pyodbc.connect(conn_str)
----> 2 psql.read_frame('select count(*) from table_x', con=conn)
      3 conn.close()

/usr/lib/pymodules/python2.7/pandas/io/sql.pyc in read_frame(sql, con, index_col)

/usr/lib/pymodules/python2.7/pandas/core/frame.pyc in from_records(cls, data, index, exclude, columns, names)

/usr/lib/pymodules/python2.7/pandas/core/frame.pyc in _list_to_sdict(data, columns)

/usr/lib/pymodules/python2.7/pandas/_tseries.so in pandas._tseries.to_object_array (pandas/src/tseries.c:67122)()

TypeError: Expected list, got pyodbc.Row
