Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"pymysql.err.InternalError: (1046, u'No database selected')" error message when running Python script from command line

Tags:

pymysql

I'm trying to run a Python script that connects to a MySQL database through PyMySQL. The script is effectively:

import pymysql
cnx = pymysql.connect(read_default_file = "/directory/my.cnf", cursorclass = pymysql.cursors.DictCursor)
cursor = cnx.cursor()
# Do stuff.

When I run the script in the interpreter, I don't get any errors, but when I try to run it from the command line, I get the following error:

Traceback (most recent call last):
  File "s02_prepare_data_RNN.py", line 264, in <module>
    (omniture, urls, years, global_regions) = get_omniture_data("omniture_results")
  File "s02_prepare_data_RNN.py", line 76, in get_omniture_data
    sso_to_accountid = get_sso_accountids()
  File "s02_prepare_data_RNN.py", line 31, in get_sso_accountids
    cursor.execute(query)
  File "/home/rdu/malcorn/.local/lib/python2.6/site-packages/pymysql/cursors.py", line 134, in execute
    result = self._query(query)
  File "/home/rdu/malcorn/.local/lib/python2.6/site-packages/pymysql/cursors.py", line 282, in _query
    conn.query(q)
  File "/home/rdu/malcorn/.local/lib/python2.6/site-packages/pymysql/connections.py", line 768, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
  File "/home/rdu/malcorn/.local/lib/python2.6/site-packages/pymysql/connections.py", line 929, in _read_query_result
    result.read()
  File "/home/rdu/malcorn/.local/lib/python2.6/site-packages/pymysql/connections.py", line 1125, in read
    first_packet = self.connection._read_packet()
  File "/home/rdu/malcorn/.local/lib/python2.6/site-packages/pymysql/connections.py", line 893, in _read_packet
    packet.check_error()
  File "/home/rdu/malcorn/.local/lib/python2.6/site-packages/pymysql/connections.py", line 369, in check_error
    err.raise_mysql_exception(self._data)
  File "/home/rdu/malcorn/.local/lib/python2.6/site-packages/pymysql/err.py", line 120, in raise_mysql_exception
    _check_mysql_exception(errinfo)
  File "/home/rdu/malcorn/.local/lib/python2.6/site-packages/pymysql/err.py", line 115, in _check_mysql_exception
    raise InternalError(errno, errorvalue)
pymysql.err.InternalError: (1046, u'No database selected')
like image 263
airalcorn2 Avatar asked Aug 11 '26 19:08

airalcorn2


1 Answers

Modifying my code from:

import pymysql
cnx = pymysql.connect(read_default_file = "/directory/my.cnf", cursorclass = pymysql.cursors.DictCursor)
cursor = cnx.cursor()
# Do stuff.

to:

import pymysql
cnx = pymysql.connect(read_default_file = "/directory/my.cnf", cursorclass = pymysql.cursors.DictCursor)
cursor = cnx.cursor()
if __name__ == "__main__":
    # Do stuff.

fixed the error. I had the thought that Python might be trying to execute the queries before the connection was established, so I tried putting the main part of my program under if __name__ == "__main__": and that fixed it. I'm still not 100% what is going on, though. I had assumed the code would wait for the connection to be established before proceeding to the following lines, but this fix suggests that's not the case.

It's also worth noting that I was only getting the error when running the original script from the command line on a server that has Python 2.6. When I ran the original script from the command line on my local machine that has Python 2.7, I did not get the error.

Anyway, if __name__ == "__main__": is good Python style, so I'll make sure to use it in the future.

like image 91
airalcorn2 Avatar answered Aug 13 '26 20:08

airalcorn2