2015-09-23 133 views
0

我試圖運行一個Python腳本,它通過PyMySQL連接到MySQL數據庫。該腳本實際上是:「從命令行運行Python腳本時出現」pymysql.err.InternalError:(1046,u'No database selected')「錯誤消息

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

當我運行在解釋劇本,我沒有得到任何錯誤,但是當我嘗試從在命令行中運行它,我得到以下錯誤:

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') 

回答

0

修改我的代碼:

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

到:

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

修復了錯誤。我認爲Python可能會在連接建立之前嘗試執行查詢,所以我嘗試將我的程序的主要部分放在if __name__ == "__main__":之下,並且修復了它。儘管如此,我仍然不是100%。我認爲代碼會在繼續執行以下幾行之前等待連接建立,但此修復建議不是這種情況。

還值得一提的是,我只在從具有Python 2.6的服務器的命令行運行原始腳本時出現錯誤。當我使用Python 2.7的本地機器上的命令行運行原始腳本時,我沒有收到錯誤信息。

無論如何,if __name__ == "__main__":是很好的Python風格,所以我會確保將來使用它。