⑴ 求教,python3怎麼通過SSH隧道連接mysql資料庫並執行SQL操作
python3發布以來,獲取了廣大程序員們的差評,說不穩定,又是不兼容什麼的,不過差評歸差評,python3既然已經發布,肯定是個趨勢,但在python3.4裡面,使用原來python2.7的mysqldb已經不能連接mysql資料庫了,比較令人糾結,不過我們可以使用pymysql,來完成連接mysql的重任,步驟如下:序號描述1去github上下載pymysql的安裝包pymysql2解壓到某個盤符下3打開cmd窗口(win環境下),進入pymysql的根目錄下執行命令,pythonsetup.pyinstall4在程序里,導入pymysql5開始連接資料庫資料庫操作的API文檔連接:代碼如下:__author__='qindongliang'#導入pymysql的包importpymysqltry:#獲取一個資料庫連接,注意如果是UTF-8類型的,需要制定資料庫conn=pymysql.connect(host='localhost',user='root',passwd='qin',db='person',port=3306,charset='utf8')cur=conn.cursor()#獲取一個游標cur.execute('select*fromperson')data=cur.fetchall()fordindata:#注意int類型需要使用str函數轉義print("ID:"+str(d[0])+'名字:'+d[1]+"性別:"+d[2])cur.close()#關閉游標conn.close()#釋放資料庫資源exceptException:print("發生異常")結果如下:D:\python\python.exeD:/pythonide/pythonprojectworkspace/python/mysql.pyID:1名字:秦天性別:男ID:2名字:王晶性別:女Processfinishedwithexitcode0
⑵ 如何使用Python3.4連接MySQL
序號 描述
1 去github上下載pymysql的安裝包pymysql
2 解壓到某個盤符下
3 打開cmd窗口(win環境下),進入pymysql的根目錄下執行命令,python setup.py install
4 在程序里,導入pymysql
5 開始連接資料庫
資料庫操作的API文檔連接:http://legacy.python.org/dev/peps/pep-0249/
代碼如下:
Python代碼
__author__='qindongliang'
#導入pymysql的包
importpymysql
try:
#獲取一個資料庫連接,注意如果是UTF-8類型的,需要制定資料庫
conn=pymysql.connect(host='localhost',user='root',passwd='qin',db='person',port=3306,charset='utf8')
cur=conn.cursor()#獲取一個游標
cur.execute('select*fromperson')
data=cur.fetchall()
fordindata:
#注意int類型需要使用str函數轉義
print("ID:"+str(d[0])+'名字:'+d[1]+"性別:"+d[2])
cur.close()#關閉游標
conn.close()#釋放資料庫資源
exceptException:print("發生異常")
Java代碼
D:pythonpython.exeD:/pythonide/pythonprojectworkspace/python/mysql.py
ID:1名字:秦天性別:男
ID:2名字:王晶性別:女
Processfinishedwithexitcode0
原文http://qindongliang1922.iteye.com/blog/2096512
補充說明:
mysqldb作為python連接mysql資料庫的工具,但是mysqldb目前支撐的版本較低,安裝失敗。所以才嘗試pymysql,這個比較簡單易用
軟體下載地址:
python3.2.5:https://www.python.org/ftp/python/3.2.5/python-3.2.5.msi
pymysql3.0.5:https://pypi.python.org/packages/source/P/PyMySQL3/PyMySQL3-0.5.tar.gz
mysql:http://www.phpstudy.net/phpstudy/phpStudyLite.zip(為了方便安裝,我這里選擇phpstudy)
1、python安裝目錄設定為d:/python32
2、pymysql安裝方法為:解壓下載的文件,在cmd中運行: python setup.py install。
檢驗安裝安裝是否成功的方法:import pymysql 。 如果不報錯 說明安裝成功。
3、mysql安裝目錄為D:/phpStudy/MySQL。為避免更多配置問題,可在啟動phpstudy後,將其設為系統服務
4、基本操作:
(1)導入pymysql: import pymysql
(2)連接資料庫: conn=pymysql.connect(host='localhost',user='root',passwd='root',db='ere',charset='utf8') 務必注意各等號前面的內容!charset參數可避免中文亂碼
(3)獲取操作游標:cur=conn.cursor()
(4)執行sql語句,插入記錄:sta=cur.execute("insert 語句") 執行成功後sta值為1。更新、刪除語句與此類似。
(5)執行sql語句,查詢記錄:cur.execute("select語句") 執行成功後cur變數中保存了查詢結果記錄集,然後再用循環列印結果:
for each in cur:
print(each[1].decode('utf-8')) # each[1] 表示當前游標所在行的的第2列值,如果是中文則需要處理編碼
⑶ 如何在python中使用mysqldb
首先在命令行中 pip install mysqldb
然後散備卜直滾槐接沖穗進入python環境 import mysqldb
⑷ 我安裝好mysqldb後,在Python2.7中import mysqldb可以成功,但是在Pyt
python2.7和python3.4你可以看成是兩個軟體,你在一個里裝了,另一個里當然不能用,你需要在python3.4里也安裝mysqldb才可以,你可以通過pip install mysql-python,或者python3 setup.py install 來安裝。
如果解決了您的問題請採納!
如果未解決請繼續追問
⑸ python怎麼處理mysql dmp文件
在Windows平台上安裝mysql模塊用於Python開發
用python連接mysql的時候,需要用的安裝版本,源碼版本容易有錯誤提示。下邊是打包了32與64版本。
MySQL-python-1.2.3.win32-py2.7.exe
MySQL-python-1.2.3.win-amd64-py2.7.exe
實例 1、取得 MYSQL 的版本
# -*- coding: UTF-8 -*-
#安裝 MYSQL DB for python
import MySQLdb as mdb
con = None
try:
#連接 mysql 的方法: connect('ip','user','password','dbname')
con = mdb.connect('localhost', 'root','root', 'test');
#所有的查詢,都在連接 con 的一個模塊 cursor 上面運行的
cur = con.cursor()
#執行一個查詢
cur.execute("SELECT VERSION()")
#取得上個查詢的結果,是單個結果
data = cur.fetchone()
print "Database version : %s " % data
finally:
if con:
#無論如何,連接記得關閉
con.close()
實例 2、創建一個表並且插入數據
import MySQLdb as mdb
import sys
#將 con 設定為全局連接
con = mdb.connect('localhost', 'root', 'root', 'test');
with con:
#獲取連接的 cursor,只有獲取了 cursor,我們才能進行各種操作
cur = con.cursor()
#創建一個數據表 writers(id,name)
cur.execute("CREATE TABLE IF NOT EXISTS
Writers(Id INT PRIMARY KEY AUTO_INCREMENT, Name VARCHAR(25))")
#以下插入了 5 條數據
cur.execute("INSERT INTO Writers(Name) VALUES('Jack London')")
cur.execute("INSERT INTO Writers(Name) VALUES('Honore de Balzac')")
cur.execute("INSERT INTO Writers(Name) VALUES('Lion Feuchtwanger')")
cur.execute("INSERT INTO Writers(Name) VALUES('Emile Zola')")
cur.execute("INSERT INTO Writers(Name) VALUES('Truman Capote')")
實例 3、 python 使用 slect 獲取 mysql 的數據並遍歷
import MySQLdb as mdb
import sys
#連接 mysql,獲取連接的對象
con = mdb.connect('localhost', 'root', 'root', 'test');
with con:
#仍然是,第一步要獲取連接的 cursor 對象,用於執行查詢
cur = con.cursor()
#類似於其他語言的 query 函數, execute 是 python 中的執行查詢函數
cur.execute("SELECT * FROM Writers")
#使用 fetchall 函數,將結果集(多維元組)存入 rows 裡面
rows = cur.fetchall()
#依次遍歷結果集,發現每個元素,就是表中的一條記錄,用一個元組來顯示
for row in rows:
print row
運行結果:
(1L, 『Jack London')
(2L, 『Honore de Balzac')
(3L, 『Lion Feuchtwanger')
(4L, 『Emile Zola')
(5L, 『Truman Capote')
上面的代碼,用來將所有的結果取出,不過列印的時候是每行一個元祖列印,現在我們使用方法,取出其中的單個數據:
import MySQLdb as mdb
import sys
#獲取 mysql 的鏈接對象
con = mdb.connect('localhost', 'root', 'root', 'test');
with con:
#獲取執行查詢的對象
cur = con.cursor()
#執行那個查詢,這里用的是 select 語句
cur.execute("SELECT * FROM Writers")
#使用 cur.rowcount 獲取結果集的條數
numrows = int(cur.rowcount)
#循環 numrows 次,每次取出一行數據
for i in range(numrows):
#每次取出一行,放到 row 中,這是一個元組(id,name)
row = cur.fetchone()
#直接輸出兩個元素
print row[0], row[1]
運行結果:
1 Jack London
2 Honore de Balzac
3 Lion Feuchtwanger
4 Emile Zola
5 Truman Capote
實例 4、使用字典 cursor 取得結果集(可以使用表欄位名字訪問值)
import MySQLdb as mdb
import sys
#獲得 mysql 查詢的鏈接對象
con = mdb.connect('localhost', 'root', 'root', 'test')
with con:
#獲取連接上的字典 cursor,注意獲取的方法,
#每一個 cursor 其實都是 cursor 的子類
cur = con.cursor(mdb.cursors.DictCursor)
#執行語句不變
cur.execute("SELECT * FROM Writers")
#獲取數據方法不變
rows = cur.fetchall()
#遍歷數據也不變(比上一個更直接一點)
for row in rows:
#這里,可以使用鍵值對的方法,由鍵名字來獲取數據
print "%s %s" % (row["Id"], row["Name"])
實例 5、獲取單個表的欄位名和信息的方法
import MySQLdb as mdb
import sys
#獲取資料庫的鏈接對象
con = mdb.connect('localhost', 'root', 'root', 'test')
with con:
#獲取普通的查詢 cursor
cur = con.cursor()
cur.execute("SELECT * FROM Writers")
rows = cur.fetchall()
#獲取連接對象的描述信息
desc = cur.description
print 'cur.description:',desc
#列印表頭,就是欄位名字
print "%s %3s" % (desc[0][0], desc[1][0])
for row in rows:
#列印結果
print "%2s %3s" % row
運行結果:
cur.description: ((『Id', 3, 1, 11, 11, 0, 0), (『Name', 253, 17, 25, 25, 0, 1))
Id Name
1 Jack London
2 Honore de Balzac
3 Lion Feuchtwanger
4 Emile Zola
5 Truman Capote
實例 6、使用 Prepared statements 執行查詢(更安全方便)
import MySQLdb as mdb
import sys
con = mdb.connect('localhost', 'root', 'root', 'test')
with con:
cur = con.cursor()
#我們看到,這里可以通過寫一個可以組裝的 sql 語句來進行
cur.execute("UPDATE Writers SET Name = %s WHERE Id = %s",
("Guy de Maupasant", "4"))
#使用 cur.rowcount 獲取影響了多少行
print "Number of rows updated: %d" % cur.rowcount
結果:
Number of rows updated: 1
實例 7、把圖片用二進制存入 MYSQL
有人喜歡把圖片存入 MYSQL(這種做法貌似很少吧),我看大部分的程序,圖片都是存放在伺服器上的文件,資料庫中存的只是圖片的地址而已,不過 MYSQL 是支持把圖片存入資料庫的,也相應的有一個專門的欄位 BLOB (Binary Large Object),即較大的二進制對象欄位,請看如下程序,注意測試圖片自己隨便找一個,地址要正確:
首先,在資料庫中創建一個表,用於存放圖片:
復制代碼代碼如下:
CREATE TABLE Images(Id INT PRIMARY KEY AUTO_INCREMENT, Data MEDIUMBLOB);
然後運行如下 PYTHON 代碼進行:
import MySQLdb as mdb
import sys
try:
#用讀文件模式打開圖片
fin = open("../web.jpg")
#將文本讀入 img 對象中
img = fin.read()
#關閉文件
fin.close()
except IOError, e:
#如果出錯,列印錯誤信息
print "Error %d: %s" % (e.args[0],e.args[1])
sys.exit(1)
try:
#鏈接 mysql,獲取對象
conn = mdb.connect(host='localhost',user='root',passwd='root',
db='test')
#獲取執行 cursor
cursor = conn.cursor()
#直接將數據作為字元串,插入資料庫
cursor.execute("INSERT INTO Images SET Data='%s'" %
mdb.escape_string(img))
#提交數據
conn.commit()
#提交之後,再關閉 cursor 和鏈接
cursor.close()
conn.close()
except mdb.Error, e:
#若出現異常,列印信息
print "Error %d: %s" % (e.args[0],e.args[1])
sys.exit(1)
實例 8、從資料庫中把圖片讀出來
import MySQLdb as mdb
import sys
try:
#連接 mysql,獲取連接的對象
conn = mdb.connect('localhost', 'root', 'root', 'test');
cursor = conn.cursor()
#執行查詢該圖片欄位的 SQL
cursor.execute("SELECT Data FROM Images LIMIT 1")
#使用二進制寫文件的方法,打開一個圖片文件,若不存在則自動創建
fout = open('image.png','wb')
#直接將數據如文件
fout.write(cursor.fetchone()[0])
#關閉寫入的文件
fout.close()
#釋放查詢數據的資源
cursor.close()
conn.close()
except IOError, e:
#捕獲 IO 的異常 ,主要是文件寫入會發生錯誤
print "Error %d: %s" % (e.args[0],e.args[1])
sys.exit(1)
實例 9、使用 Transaction 即事務(手動提交,自動回滾)
import MySQLdb as mdb
import sys
try:
#連接 mysql,獲取連接的對象
conn = mdb.connect('localhost', 'root', 'root', 'test');
cursor = conn.cursor()
#如果某個資料庫支持事務,會自動開啟
#這里用的是 MYSQL,所以會自動開啟事務(若是 MYISM 引擎則不會)
cursor.execute("UPDATE Writers SET Name = %s WHERE Id = %s",
("Leo Tolstoy", "1"))
cursor.execute("UPDATE Writers SET Name = %s WHERE Id = %s",
("Boris Pasternak", "2"))
cursor.execute("UPDATE Writer SET Name = %s WHERE Id = %s",
("Leonid Leonov", "3"))
#事務的特性 1、原子性的手動提交
conn.commit()
cursor.close()
conn.close()
except mdb.Error, e:
#如果出現了錯誤,那麼可以回滾,就是上面的三條語句要麼執行,要麼都不執行
conn.rollback()
print "Error %d: %s" % (e.args[0],e.args[1])
結果:
1、因為不存在 writer 表( SQL 第三條語句),所以出現錯誤:Error 1146: Table 『test.writer' doesn't exist
2、出現錯誤,出發異常處理, 3 條語句的前兩條會自動變成了沒有執行,結果不變
3、如果本代碼放到一個 MyISAM 引擎表,前兩句會執行,第三句不會;如果是 INNDB 引擎,則都不會執行。
⑹ 請教個 python mysqldb commit的問題
任何應用都離不開數據,所以在學習python的時候,當然也要學習一個如何用python操作資料庫了。MySQLdb就是python對mysql資料庫操作的模塊。官方Introction : MySQLdb is an thread-compatible interface to the popular MySQL database server that provides the Python database API. 它其實相當於翻譯了對應C的介面。
使用這種資料庫介面大多是就是執行連接資料庫->執行query->提取數據->關閉連接 這幾個步驟。MySQLdb提供比較關鍵的對象,分別是Connection、Cursor、Result。具體使用步驟很簡單先不寫了,先寫一些個人認為比較重要、值得注意的地方。
1、雖然在MySQLdb.Connect(host ,user , passw , db)函數中,我們經常使用的只是這幾個參數,但是其實裡面還有很多比如字元集、線程安全、ssl等也都是很重要的參數,使用御雀察時要身份注意。
2、當使用Connection.query()函數進行query後,connection 對象可以返回兩種result,分別是store_result和use_result,store_result 將結果集存回client端,而use_result則是結果集保存在server端,並且維護了一個連接,會佔用server資源。此時,不可以進行任何其他的查詢。建議使用store_result,除歲咐非返回結果集(result set)過大或是無法使用limit的情形。
3、提取(fetch)數據的返回形式大多有三種情形。 as a tuple(how=0) ;as dictionaries, key=column or table.column if plicated(how=1);as dictionaries, key=table.column (how=2)
4、每次fetch,在result內部都會產生數據位置的移動,也就是說假如有10行數據,執行result.fetch_row(3,0),會得到前三行,再執行result.fetch_row(3,0),則會得到中間的三行,所以說fetch會導致position的移動。另外值得注意的是,如果使用use_result,也就是數據存儲在server時,在fetch所有的條目之前,不能進行任何的query操作。
5、mysql本身不支持游標(Cursor),但是MySQLdb對Cursor進行了模擬。重要的執行query方法有execute 和 executemany 。execute方法,執行單條sql語句,調用executemany方法很好用,資料庫性能瓶頸很大一部分就在於網路IO和磁碟IO將多個insert放在一起,只執行一次IO,可以有效的提升資料庫性能。游標cursor具有fetchone、fetchmany、fetchall三個方法提取數據,每個方法都會導致游標游動,所以必須關注游標的位置。游標的scroll(value, mode)方法可以使得游標進行卷動,mode參數指定相對當前位置(relative)還是以絕對位置(absolute)進行移動。
6、MySQLdb提供了很多函數方法,在官方指南里沒有完全羅列,使用者可以用help去看看,裡面提供了很多方便的東西。
7、對於mysql來說,如果使用支持事務的存儲引擎,那麼每次操作後,commit是必須的,否則不會真正寫入資料庫,對應rollback可以進行相應的回滾,但是commit後是無法再rollback的。commit() 可以在執行很多sql指令後再一次調用,這樣可以適當提升性能。
8、executemany處理過多的命令也不見得一定好,因為數據一起傳入到server端,可能會造成server端的buffer溢出,而一次數據量過大,也有可能產生一些意想不到的麻煩。合理,分批次executemany是個不錯的辦法。
最後,我自己寫了個pyMysql模塊,主要是對MySQLdb提供的常用方法進行了簡單的再次封裝,也藉此機會好好學習下MySQLdb,以鎮茄及練習python的編碼。該程序使用的資料庫表,採用myisam引擎,所以沒加上commit(),一般最好還是要加上的。
⑺ 關於python中MYSQL輸出的問題
L代表long數據類型,可以有表示無限大的數
普通的整數是int類型,對應於C語言中的long類型,有固攜信定的位數
Python3合並了long和int類型,int類型就可以表示無限大的數
在Python2中MySQLdb把所有的數都轉換成了long類型
兩者在很辯友輪大的數間進行運算時,可能存在速度的差異,並沒有什麼其他的影響
如果數小於32位,int()可以把long類告宏型轉換為int類型
⑻ python查看mysql負載
這個問題並不是轉義方面的問題,不信的話可以使用\s的完整模式status試試:
sql = 'status'
還是一樣會報錯,這是因為\s屬兆睜差於mysql的系統命令,並不輸入sql語句的范疇,所有使用python的mysqldb模塊是獲得不到族皮結果的。
這樣的話只能從python的os模塊早吵執行系統命令方面入手了
>>> import os
>>> os.system("mysql -u root -e status")
--------------
mysql Ver 14.15 Distrib 6.0.11-alpha, for portbld-freebsd7.2 (i386) using 5.2
Connection id: 66
Current database:
Current user: root@localhost
...
...
或者
>>> print os.popen("mysql -u root -e status").read()
--------------
mysql Ver 14.15 Distrib 6.0.11-alpha, for portbld-freebsd7.2 (i386) using 5.2
Connection id: 67
...
...
希望能幫到樓主
⑼ python怎麼安裝mysqldb unable to find vcvarsall.bat
今天在安裝reportlab時老是發生Unable to find vcvarsall.bat的錯誤,上網找了一下,在eddsn找到了「Unable to find vcvarsall.bat」 error when trying to install rdflib這么一篇文章,解決了問題。方法如下:
首先安裝MinGW,在MinGW的安裝目錄下找到bin的文件夾,找到mingw32-make.exe,復制一份更名為make.exe;
把MinGW的路徑添加到環境變數path中,比如我把MinGW安裝到D:\MinGW\中,就把D:\MinGW\bin添加到path中;
打開命令行窗口,在命令行窗口中進入到要安裝代碼的目錄下;
輸入如下命蔽橘令就可以安裝了。
setup.py install build --compiler=mingw32
簡單的在windows安裝pygraphiviz的過程如下:
1. 首先安裝graphviz, http://www.graphviz.org/pub/graphviz/stable/windows/graphviz-2.28.0.msi
2. 下載pygraphviz源碼包,http://pypi.python.org/packages/source/p/pygraphviz/pygraphviz-1.1.zip
3. 解壓後
1. 修改setup.py,三個地方要改
library_path=r'D:\Program Files (x86)\Graphviz 2.28\lib\release\lib' #按你的graphviz路徑修改
include_path=r'D:\Program Files (x86)\Graphviz 2.28\include\graphviz' #按你的graphviz路徑埋螞修改
2. 修改文件unixcompiler.py,一般是285行(「C:\python27\lib\distutils\unixcompiler.py")如下:
old: compiler = os.path.basename(sysconfig.get_config_var("CC"))
new: compiler = "gcc"
編譯完pygraphviz後,記得改回去。
4. python setup.py build -c mingw32 要先確定已安裝mingw32
5. 手工拷貝pygraphviz目錄(像:D:\Downloads\pygraphviz\build\lib.win32-2.7) 到python的site-packages下:C:\Python27\Lib\site-packages
6. 檢查下是否安裝成功
import pygraphviz
按上述方法基本就可以安裝成功。
但是,我在這個過程中碰見如下幾個問題:
1. 嘗試用python setup.py build -c mingw32的時候,碰到:gcc: 錯誤:unrecognized command line option 『-mno-cygwin』
錯誤如下:
running build_ext
building 'pygraphviz._graphviz' extension
d:\MinGW\bin\gcc.exe -mno-cygwin -mdll -O -Wall "-ID:\Program Files (x86)\Graphviz 2.28\include\grap
hviz" -ID:\Python\Python27\include -ID:\Python\Python27\PC -c pygraphviz/graphviz_wrap.c -o build\te
mp.win32-2.7\Release\pygraphviz\graphviz_wrap.o
gcc: 錯誤:unrecognized command line option 『-mno-cygwin』
error: command 'gcc' failed with exit status 1
原因:
mingw版本太新了...無語...找了個老彎並埋版本的mingw32就可以了。
2. 編譯過程中,碰見:cannot find -lcgraph
錯誤如下:
D:\Downloads\pygraphviz>python setup.py build -c mingw32
elease\libth=D:\Program Files (x86)\Graphviz 2.28\lib
include_path=D:\Program Files (x86)\Graphviz 2.28\include\graphviz
running build
running build_py
running build_ext
building 'pygraphviz._graphviz' extension
C:\MinGW\bin\gcc.exe -mno-cygwin -mdll -O -Wall "-ID:\Program Files (x86)\Graphviz 2.28\include\grap
hviz" -ID:\Python\Python27\include -ID:\Python\Python27\PC -c pygraphviz/graphviz_wrap.c -o build\te
mp.win32-2.7\Release\pygraphviz\graphviz_wrap.o
pygraphviz/graphviz_wrap.c: In function 'agattr_label':
pygraphviz/graphviz_wrap.c:2855: warning: return makes integer from pointer without a cast
writing build\temp.win32-2.7\Release\pygraphviz\_graphviz.def
C:\MinGW\bin\gcc.exe -mno-cygwin -shared -s build\temp.win32-2.7\Release\pygraphviz\graphviz_wrap.o
elease\lib" -LD:\Python\Python27\libs -LD:\Python\Python27\PCbuild "-Wl,-RD:\Program Files (x86)\Gra
elease\lib" -lcgraph -lcdt -lpython27 -lmsvcr90 -o build\lib.win32-2.7\pygraphviz\_graphviz.pyd
c:/mingw/bin/../lib/gcc/mingw32/4.4.1/http://www.cnblogs.com/http://www.cnblogs.com/mingw32/bin/ld.exe: cannot find -lcgraph
collect2: ld returned 1 exit status
error: command 'gcc' failed with exit status 1
原因:
library_path沒有設置對。這個要說起windows路徑的問題。如果我們把一個路徑賦值給一個字元串的時候,簡單說有兩種
辦法保持路徑不會被轉義或者截斷:
1. 使用原始字元串r:
library_path=r'D:\Program Files (x86)\Graphviz 2.28\lib\release\lib'
include_path=r'D:\Program Files (x86)\Graphviz 2.28\include\graphviz'
2. 自己把'\'改為'\\':
library_path='D:\\Program Files (x86)\\Graphviz 2.28\\lib\\release\\lib'
include_path='D:\\Program Files (x86)\\Graphviz 2.28\\include\\graphviz'
3. 測試是否安裝成功的時候,發現:ImportError: No mole named _graphviz
錯誤如下:
D:\Downloads\pygraphviz>python
Python 2.7 (r27:82525, Jul 4 2010, 09:01:59) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "right", "credits" or "license" for more information.
>>> import pygraphviz
Traceback (most recent call last):
File "<stdin>", line 1, in <mole>
File "pygraphviz\__init__.py", line 54, in <mole>
from agraph import AGraph, Node, Edge, Attribute, ItemAttribute
File "pygraphviz\agraph.py", line 19, in <mole>
import graphviz as gv
File "pygraphviz\graphviz.py", line 7, in <mole>
import _graphviz
ImportError: No mole named _graphviz
原因:
不要運行python命令在pygraphviz目錄下,隨便新開個cmd窗口,再次運行python命令並且嘗試import,這下就可以了。
最近在編譯安裝Python的MysqlDb插件的時候,提示「unable to find vcvarsall.bat」,上網搜索了一下,知道是需要一個c++編譯器,於是裝了一個visual c++ 2010 express,並把vcvarsall.bat這個腳本的路徑加到了path裡面,結果再編譯的時候還是繼續報同樣的錯誤,本來還以為是編譯器沒裝好,於是裝了全套的Visual Studio 2010,結果還是不行。後來又在網上繼續搜索,終於找到個帖子說vc2010不行,要用vc2008,於是去微軟網站下載了一個visual c++ 2008 express,安裝之後,把腳本的路徑加到path裡面,終於不報這個錯誤了。
在用C給python3.寫擴展時遇到如下問題:
寫好*mole.c和setup.py文件後執行
python setup.py build
報unable to find vcvarsall.bat
我機器上有vs2005和vc6,但是還是報錯。
搜索很多資料:
網上提供解決辦法如下:
下載mingw環境,添加環境變數
使用
python setup.py build –compiler=mingw32
這個辦法感覺只是繞過了這個問題,並不是真正解決問題,而且我系統中python是用vs編譯的,擴展模塊卻用mingw-gcc編譯,感覺可能有問題。
但網上對此就缺少詳細的說明
經過對C:/Python32/Lib/distutils目錄下.py文件的仔細翻閱,發現「unable to find vcvarsall.bat」這句話出在msvc9compiler.py中
再研究這個文件發現問題所在了:
它是在注冊表中尋找到vs的目錄,再去在vs目錄下找vcvarsall.bat。
但是問題就出在python32裡面默認是vc9.0也就是vs2008所以它在注冊表裡面找不到鍵值返回None
proctdir = Reg.get_value(r"%s/Setup/VC" % vsbase,
"proctdir")
vsbase值為:Software/Microsoft/VisualStudio/9.0
具體修改代碼如下:
msvc9compiler.py中
def find_vcvarsall(version) 用於查找vcvarsall.bat version就是版本號,實際上是9.0
vc_env = query_vcvarsall(VERSION, plat_spec)
VERSION = get_build_version() 因為python32自己是由vc9.0構建的所以VERSION是9.0
修改MSVCCompiler函數:
vc_env = query_vcvarsall(VERSION, plat_spec)
為:
vc_env = query_vcvarsall(8.0, plat_spec)
不過還有這句話:
if VERSION < 8.0:
raise DistutilsPlatformError("VC %0.1f is not supported by this mole" % VERSION)
看來,python3.2中的distutils只支持vc8.0以上,即vs2005以上的編譯器。
⑽ python 按裝 MySQLdb報錯終極解決方案
按裝python時冊飢報錯:
dlopen(/Library/Python/2.7/site-packages/MySQL_python-1.2.4b4-py2.7-macosx-10.12-intel.egg/_mysql.so, 2): Library not loaded: libmysqlclient.18.dylib
原因是libmysqlclient.18.dylib沒有在/usr/lib/下渣姿瞎面,10.11osx目錄被鎖
解決方案如下:
vim ~/.bash_profile
在底端追加:
export DYLD_LIBRARY_PATH="如空/usr/local/mysql/lib:/usr/local/lib:/usr/lib:$DYD_LIBRARY_PATH"
保存後退出,運行:
source ~/.bash_profile
接著在終端運行:sudo install_name_tool -change libmysqlclient.18.dylib \
/usr/local/mysql/lib/libmysqlclient.18.dylib \
/Library/Python/2.7/site-packages/MySQL_python-1.2.4b4-py2.7-macosx-10.12-intel.egg/_mysql.so
最後一行的按裝路徑每個系統應該不同,注意查看報錯信息中的路徑。