Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Why do I have None ('NoneType' object is not iterable) when I expected a list?

I am retrieving a list of table names using pandas.read_sql and then trying to use a "for" loop to drop tables from the retrieved list. However, I am getting a ‘NoneType’ object is not iterable error (although the list is not empty).

print(type(out_tables_list))
<class 'list'>
print(out_tables_list is None)
False
tables = pd.read_sql("""
SHOW TABLES IN P_SMO_INP_T
""", con=connection)

tableName = tables.tableName
out_tables = tableName[tableName.str.contains('_sg_')]
out_tables_list = out_tables.to_list()

for name in out_tables_list:
    pd.read_sql("DROP TABLE P_SMO_INP_T.{}".format(name), con=connection)

Can you please help me figure out what’s my mistake? Thank you in advance!

LE: See below the full output I am receiving:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

TypeError                                 Traceback (most recent call last)
<ipython-input-46-1e7a629dac7d> in <module>
      1 for name in out_tables_list:
----> 2     pd.read_sql("DROP TABLE P_SMO_INP_T.{}".format(name), con=connection)

c:\users\sgulunga\appdata\local\programs\python\python38-32\lib\site-packages\pandas\io\sql.py in read_sql(sql, con, index_col, coerce_float, params, parse_dates, columns, chunksize)
    481 
    482     if isinstance(pandas_sql, SQLiteDatabase):
--> 483         return pandas_sql.read_query(
    484             sql,
    485             index_col=index_col,

c:\users\sgulunga\appdata\local\programs\python\python38-32\lib\site-packages\pandas\io\sql.py in read_query(self, sql, index_col, coerce_float, params, parse_dates, chunksize)
   1726         args = _convert_params(sql, params)
   1727         cursor = self.execute(*args)
-> 1728         columns = [col_desc[0] for col_desc in cursor.description]
   1729 
   1730         if chunksize is not None:

TypeError: 'NoneType' object is not iterable

>Solution :

A DROP query returns nothing, so None, and so pandas can’t iterate on that to build a dataframe.

See How do I drop a table in SQLAlchemy when I don't have a table object?


Note that when debugging be careful about the line raising the error, you said "although the list is not empty" but the line raising the error doesn’t use the list

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading