geograpy3: [BUG]OperationalError: no such table: countries

Describe the bug A clear and concise description of what the bug is. [OperationalError: no such table: countries]

`--------------------------------------------------------------------------- OperationalError Traceback (most recent call last) <ipython-input-3-05dee123ffd5> in <module> 1 import geograpy 2 url = ‘https://en.wikipedia.org/wiki/2012_Summer_Olympics’ ----> 3 places = geograpy.get_geoPlace_context(url=url)

~/.conda/envs/WikiCOVID/lib/python3.7/site-packages/geograpy/init.py in get_geoPlace_context(url, text, debug) 22 PlaceContext: the place context 23 ‘’’
—> 24 places=get_place_context(url, text, labels=Labels.geo, debug=debug) 25 return places 26

~/.conda/envs/WikiCOVID/lib/python3.7/site-packages/geograpy/init.py in get_place_context(url, text, labels, debug) 44 e.find_entities(labels=labels) 45 places=e.places —> 46 pc = PlaceContext(places) 47 pc.setAll() 48 return pc

~/.conda/envs/WikiCOVID/lib/python3.7/site-packages/geograpy/places.py in init(self, place_names, setAll, correctMisspelling) 30 self.places = self.normalizePlaces(place_names) 31 if setAll: —> 32 self.setAll() 33 34 def str(self):

~/.conda/envs/WikiCOVID/lib/python3.7/site-packages/geograpy/places.py in setAll(self) 85 Set all context information 86 ‘’’ —> 87 self.set_countries() 88 self.set_regions() 89 self.set_cities()

~/.conda/envs/WikiCOVID/lib/python3.7/site-packages/geograpy/places.py in set_countries(self) 96 countries = [] 97 for place in self.places: —> 98 country=self.getCountry(place) 99 if country is not None: 100 countries.append(country.name)

~/.conda/envs/WikiCOVID/lib/python3.7/site-packages/geograpy/locator.py in getCountry(self, name) 1160 params=(name,name,) 1161 country = None -> 1162 countryRecords=self.sqlDB.query(query,params) 1163 if len(countryRecords)==1: 1164 country=Country.fromRecord(countryRecords[0])

~/.conda/envs/WikiCOVID/lib/python3.7/site-packages/lodstorage/sql.py in query(self, sqlQuery, params) 181 cur=self.c.cursor() 182 if params is not None: –> 183 query = cur.execute(sqlQuery,params) 184 else: 185 query = cur.execute(sqlQuery)

OperationalError: no such table: countries`

To Reproduce Steps to reproduce the behavior:

  1. Run the example on local, remote, colab, jupyter notebook

Expected behavior A clear and concise description of what you expected to happen. The codes should results list of countries

Screenshots If applicable, add screenshots to help explain your problem.

Environment (please complete the following information):

  • OS: MAC / UBUNTU / COLAB
  • Python Version 3.9 / 3 / ?

Additional context Add any other context about the problem here.

About this issue

  • Original URL
  • State: closed
  • Created 3 years ago
  • Comments: 28 (5 by maintainers)

Commits related to this issue

Most upvoted comments

Thanks for pointing it out. There seems to be an issue with some functions in the Locator class not checking if the database is present. I will fix it ASAP.

I tested it in clean VM and got the same error when using geograpy.get_geoPlace_context(). A workaround to load the database is to use geograpy.locateCity() once since it ensures that the db is loaded. As shown below it downloaded the db and I was able to use geograpy.get_geoPlace_context().

>>> str(geograpy.get_geoPlace_context(text="Berlin is the capitol of germany"))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/vmt14/.local/lib/python3.8/site-packages/geograpy/__init__.py", line 24, in get_geoPlace_context
    places=get_place_context(url, text, labels=Labels.geo, debug=debug)
  File "/home/vmt14/.local/lib/python3.8/site-packages/geograpy/__init__.py", line 46, in get_place_context
    pc = PlaceContext(places)
  File "/home/vmt14/.local/lib/python3.8/site-packages/geograpy/places.py", line 32, in __init__
    self.setAll()
  File "/home/vmt14/.local/lib/python3.8/site-packages/geograpy/places.py", line 87, in setAll
    self.set_countries()
  File "/home/vmt14/.local/lib/python3.8/site-packages/geograpy/places.py", line 98, in set_countries
    country=self.getCountry(place)
  File "/home/vmt14/.local/lib/python3.8/site-packages/geograpy/locator.py", line 1140, in getCountry
    countryRecords=self.sqlDB.query(query,params)
  File "/home/vmt14/.local/lib/python3.8/site-packages/lodstorage/sql.py", line 186, in query
    query = cur.execute(sqlQuery,params)
sqlite3.OperationalError: no such table: countries

>>> str(geograpy.locateCity("Berlin"))
Downloading /home/vmt14/.geograpy3/locations.db.gz from https://raw.githubusercontent.com/wiki/somnathrakshit/geograpy3/data/locations.db.gz ... this might take a few seconds
unzipping /home/vmt14/.geograpy3/locations.db from /home/vmt14/.geograpy3/locations.db.gz
'Berlin (DE-BE(Berlin) - DE(Germany))'

>>> str(geograpy.get_geoPlace_context(text="Berlin is the capitol of germany"))
"countries=['Germany', 'United States of America', 'South Africa', 'Denmark']\nregions=[]\ncities=['Berlin']\nother=[]"

The file was empty so I followed the link @WolfgangFahl mentioned and downloaded it and it works! Thanks!!

You’ll also find the relevant database at https://github.com/somnathrakshit/geograpy3/wiki

Thanks for the information - sorry I’m not a very proficient Python user! I ran the script and found the result was “C:\Users<my account name>”. I moved the directory there and it didn’t initially work but I realised that I needed both the db & db.gz files and then it worked!

Thanks very much for your assistance and @WolfgangFahl.

Now I have a question about usage but I’ll create something in the discussions area…