您好,登錄后才能下訂單哦!
任何一個稍微復雜一點的網站都離不開和數據進行數據交換,在用Django開發的時候需要配置數據庫,當選擇mysql數據庫時,要想django與mysql能順利“溝通”交換數據,就需要一個橋梁——MySQLdb,前天晚上升級電腦ubuntu系統后(由14.04LTS版本升級到16.04LTS),之后電腦上以前的項目在執行python manage.py runserver命令后就報錯了,錯誤信息是 django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: libmysqlclient.so.18: cannot open shared object file: No such file or directory。
然后百度尋找解決方法,包括去Stackoverflow上找方法,絕大多數文章說可能是沒安裝MySQLdb,然后我就去安裝MySQLdb,但是系統提醒已經安裝了,提醒消息如下:Requirement already satisfied (use --upgrade to upgrade): MySQL-python==1.2.3 in /usr/local/lib/python2.7/dist-packages
這就說明系統里有MySQL-python,但為什么會報錯呢?想了很久,然后想到了卸載重新安裝,然后問題就解決了(哈哈,神器吧,其實我也沒弄明白這是為什么,可能和系統有關系,升級系統后,有些以前的東西可能就不好使了)。
在之前的ubuntu 14.04LTS版本上安裝MySQLdb時就遇到過很多問題,今天在這里做一下總結,這些都是我平時遇到的問題,以后可能會遇到更多,慢慢補充,有需要的朋友可以參考下(不正之處,還希望不吝賜教)。
MySQLdb安裝
安裝很簡單,如果你的電腦里有pythoneer三大神器virtualenv、fabric 和 pip(如果你是一名python開發人員,最后安裝一下,這三個工具功能確實很強大,網上有安裝方法,在此不做介紹),安裝MySQLdb非常簡單,一個命令就可解決。
pip install MySQL-python
如果你想指定版本可以這樣
pip install MySQL-python==1.2.3
如果安裝不了(前提是確保pip安裝成功,能使用),可能就是權限問題,此時在pip前加上sudo即可。
但是,你以為這樣就好了嗎?在windows系統下這樣可能就好了,但是在ubuntu系統下不行,它需要一些依賴包,安裝命令如下:
sudo apt-get install mysql-client sudo apt-get install libmysqlclient-dev sudo apt-get install python-dev
然后import MySQLdb,沒報錯的話,就是安裝成功
2.在執行python manage.py runserver常見問題
(1)錯誤:mysql_config not found
解決辦法:安安裝mysqld-dev包,安裝命令上面有
(2)錯誤:_mysql.c:2810: error: expected declaration specifiers before 'init_mysql'
解決辦法:安裝python-dev
(3)錯誤:ImportError: No module named setuptools
解決辦法:安裝setuptools
sudo apt-get install python-setuptools
(4)錯誤1193, "Unknown system variable 'storage_engine'
可能與django的數據庫配置有關系或者mysql配置文件有關,
在數據庫配置中加一句:
'OPTIONS': {
'init_command': 'SET default_storage_engine=INNODB',
},
即可解決問題。
MySQL5.5以后默認的數據庫存儲引擎是innod,我用的是5.7版本,而我之前的配置是
'OPTIONS': {
'init_command': 'SET storage_engine=MyISAM',
},
所以會報錯,所以這里有兩種修改方法,一種就是改django setting文件,另一種就是改mysql配置文件etc/mysql/my.cnf,加一句SET default_storage_engine=MyISAM,但不管怎么改,兩者應該要保持一致。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。