python MySQLdb安裝和使用



MySQLdb是Python連接MySQL的模塊,下面介紹一下源碼方式安裝MySQLdb:
  1. 首先要下載下載:請到官方網站http://sourceforge.net/projects/mysql-python/或者點擊鏈接下載http://downloads.sourceforge.net/project/mysql-python/mysql-python-test/1.2.3c1/MySQL-python-1.2.3c1.tar.gz?use_mirror=nchc

  2. 解壓:tar zxvf MySQL-python*

  3. 進入文件目錄,運行以下命令:
    python setup.py install

  4. 安裝完成,到你的python安裝目錄下的site-packages目錄裏檢查以下文件是否存在,如果存在即代表安裝成功了
    Linux:MySQL_python-1.2.3c1-py2.6-linux-i686.egg
    Mac OS X:MySQL_python-1.2.3c1-py2.6-macosx-10.4-x86_64.egg
    注:如果碰到mysql_config not found的問題,有兩種方法解決:
    1)ln -s /usr/local/mysql/bin/mysql_config /usr/local/bin/mysql_config
    將mysql_confi從你的安裝目錄鏈接到/usr/local/bin目錄下,這樣就可以在任意目錄下訪問了(也可以放到/usr/bin)
    2)編輯源碼文件夾的site.cfg文件,去掉#mysql_config = /usr/local/bin/mysql_config前的註釋#,修改後面的路徑爲你的mysql_config真正的目錄就可以了。(如果不知道mysql_config在哪裏,運行命令:whereis mysql_config)

注:如果碰到import error: libmysqlclient.so.18: cannot open shared object file: No such file or directory

    解決方法: locate or find libmysqlclient.so.18

    link path/libmysqlclient.so.18 /usr/lib/libmysqlclient.so.18

    vi /etc/ld.so.conf    //加入libmysqlclient.so.18 所在的目錄

    插入: /usr/lib/

    保存退出後執行/sbin/ldconfig生效



  1. 測試方法
    1)運行命令python進入python運行環境
    2)輸入以下python代碼進行測試
    import MySQLdb

  2. test=MySQLdb.connect(db='mydb',host='myhost',user='u',passwd='p')

  3. cur = test.cursor()

  4. cur.execute('show databases;')

  5. for data in cur.fetchall():

  6.    print data

  7. 3)如果你在屏幕上看到了你幾個數據庫的庫名的輸出代表你安裝成功了

  8. 可能碰到的問題
    1)問題:ImportError: libmysqlclient_r.so.16: cannot open shared object file: No such file or directory
    原因是python無法找到mysql目錄下的libmysqlclient_r.so.16動態庫,其實MySQLdb是調用mysql的c函數庫.所以本機上首先得安裝了mysql
    然後: export LD_LIBRARY_PATH=/usr/local/mysql/lib/mysql:$LD_LIBRARY_PATH
    並且將/usr/local/mysql5.1/lib/mysql 放入/etc/ld.so.conf中
    /etc/ld.so.conf改後內容爲:
    include ld.so.conf.d/*.conf
    /usr/local/mysql5.1/lib/mysql
    最後重新再測試一下,就不會有上面的問題了


MySQLdb操作:

Python代碼
  1. #!/usr/bin/env python

  2. #coding=utf-8

  3. ###################################

  4. #MySQLdb 示例

  5. #

  6. ##################################

  7. import MySQLdb


  8. #建立和數據庫系統的連接

  9. conn = MySQLdb.connect(host='localhost', user='root',passwd='longforfreedom')


  10. #獲取操作遊標

  11. cursor = conn.cursor()

  12. #執行SQL,創建一個數據庫.

  13. cursor.execute("""create database python """)


  14. #關閉連接,釋放資源

  15. cursor.close();

#!/usr/bin/env python

#coding=utf-8

##################################

#MySQLdb 示例 #

##################################

import MySQLdb

#建立和數據庫系統的連接

conn = MySQLdb.connect(host='localhost', user='root',passwd='longforfreedom')

#獲取操作遊標

cursor = conn.cursor()

#執行SQL,創建一個數據庫.

cursor.execute("""create database python """)

#關閉連接,釋放資源

cursor.close();


創建數據庫,創建表,插入數據,插入多條數據

Python代碼:
  1. #!/usr/bin/env python

  2. #coding=utf-8

  3. ###################################

  4. #MySQLdb 示例

  5. #

  6. ##################################

  7. import MySQLdb


  8. #建立和數據庫系統的連接

  9. conn = MySQLdb.connect(host='localhost', user='root',passwd='longforfreedom')


  10. #獲取操作遊標

  11. cursor = conn.cursor()

  12. #執行SQL,創建一個數據庫.

  13. cursor.execute("""create database if not exists python""")


  14. #選擇數據庫

  15. conn.select_db('python');

  16. #執行SQL,創建一個數據表.

  17. cursor.execute("""create table test(id int, info varchar(100)) """)


  18. value = [1,"inserted ?"];


  19. #插入一條記錄

  20. cursor.execute("insert into test values(%s,%s)",value);


  21. values=[]



  22. #生成插入參數值

  23. for i in range(20):

  24. values.append((i,'Hello mysqldb, I am recoder ' + str(i)))

  25. #插入多條記錄


  26. cursor.executemany("""insert into test values(%s,%s) """,values);


  27. #關閉連接,釋放資源

  28. cursor.close();


#!/usr/bin/env python

#coding=utf-8

###################################

#MySQLdb 示例 #

##################################

import MySQLdb

#建立和數據庫系統的連接

conn = MySQLdb.connect(host='localhost', user='root',passwd='longforfreedom')

#獲取操作遊標

cursor = conn.cursor()

#執行SQL,創建一個數據庫.

cursor.execute("""create database if not exists python""")

#選擇數據庫

conn.select_db('python');

#執行SQL,創建一個數據表.

cursor.execute("""create table test(id int, info varchar(100)) """)

value = [1,"inserted ?"];

#插入一條記錄

cursor.execute("insert into test values(%s,%s)",value);

values=[]

#生成插入參數值

for i in range(20):

   values.append((i,'Hello mysqldb, I am recoder ' + str(i)));      

#插入多條記錄

   cursor.executemany("""insert into test values(%s,%s) """,values);

  #關閉連接,釋放資源

   cursor.close();

查詢和插入的流程差不多,只是多了一個得到查詢結果的步驟


Python代碼:
  1. #!/usr/bin/env python

  2. #coding=utf-8

  3. #

  4. # MySQLdb 查詢

  5. #

  6. #######################################


  7. import MySQLdb

  8. conn = MySQLdb.connect(host='localhost', user='root', passwd='longforfreedom',db='python')


  9. cursor = conn.cursor()

  10. count = cursor.execute('select * from test')


  11. print'總共有 %s 條記錄',count

  12. #獲取一條記錄,每條記錄做爲一個元組返回

  13. print"只獲取一條記錄:"

  14. result = cursor.fetchone();

  15. print result

  16. #print 'ID: %s info: %s' % (result[0],result[1])

  17. print'ID: %s info: %s' % result


  18. #獲取5條記錄,注意由於之前執行有了fetchone(),所以遊標已經指到第二條記錄了,也就是從第二條開始的所有記錄

  19. print"只獲取5條記錄:"

  20. results = cursor.fetchmany(5)

  21. for r in results:

  22. print r


  23. print"獲取所有結果:"

  24. #重置遊標位置,0,爲偏移量,mode=absolute | relative,默認爲relative,

  25. cursor.scroll(0,mode='absolute')

  26. #獲取所有結果

  27. results = cursor.fetchall()

  28. for r in results:

  29. print r

  30. conn.close()

默認mysqldb返回的是元組,這樣對使用者不太友好,也不利於維護
下面是解決方法

  1. importMySQLdb

  2. importMySQLdb.cursors


  3. conn= MySQLdb.Connect(

  4. host='localhost', user='root',

  5. passwd='', db='test',compress=1,

  6. cursorclass=MySQLdb.cursors.DictCursor, charset='utf8')//<- important


  7. cursor= conn.cursor()

  8. cursor.execute("SELECT name, txt FROM table")

  9. rows= cursor.fetchall()

  10. cursor.close()

  11. conn.close()


  12. forrowinrows:

  13.    printrow['name'], row['txt']# bingo!

  1. # another (even better) way is:


  2. conn= MySQLdb.Connect(

  3. host='localhost', user='root',

  4. passwd='', db='test',compress=1)

  5. cursor= conn.cursor(cursorclass=MySQLdb.cursors.DictCursor)

  6. # ...

  7. # results by field name

  8. cursor= conn.cursor()

  9. # ...

  10. # ...results by field number


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章