標籤:
官網地址:http://mysql-python.sourceforge.net/MySQLdb User‘s Guide http://mysql-python.sourceforge.net/MySQLdb.html
使用:
匯入python-MySQLdb 模組
import MySQLdb #匯入python-MySQLdb 模組conn = MySQLdb.connect( #建立connection host=‘192.168.10.128‘, user=‘root‘, passwd=‘123456‘, port=3306, charset=‘utf8‘)cursor = conn.cursor() #擷取cursor遊標
print conn
print cursor
sql = "show databases"
cursor.execute(sql)
conn.commit() #
cursor.close() #關閉cursor
conn.close() #關閉串連
輸出結果:
>>> <_mysql.connection open to ‘192.168.10.128‘ at 2ea5da8><MySQLdb.cursors.Cursor object at 0x0000000002F64198>>>>
建立串連:MySQLdb.connect(參數)
參數名 |
類型 |
說明 |
host |
字串 |
MySQL伺服器位址(如果是本地,用localhost) |
port |
數字 |
MySQL伺服器連接埠(一般為3306) |
user |
字串 |
MySQL使用者 |
password |
字串 |
MySQL使用者密碼 |
db |
字串 |
資料庫名 (=conn.select_db(‘資料庫名‘)) |
charset |
字串 |
字元集類型 |
其他 |
字串 |
|
|
|
|
資料庫操作:
1,使用cursor.execute()執行SQL語句
幾乎支援所有能在MySQL上用的SQL語句,只要把SQL語句賦給cursor.execute()的參數即可。
選擇資料庫:
conn.select_db(‘test‘)
建立資料庫表:
create_table_area="CREATE TABLE `area` (\
`area_id` bigint(20) NOT NULL AUTO_INCREMENT,\
`name` varchar(255) NOT NULL,\
PRIMARY KEY (`area_id`)\
)"
cursor.execute(create_table_area)
插入單條資料:
sql = "insert into area (area_id,name) values(1,‘Tim‘)"
cursor.execute(sql)
插入多條資料:
insert_area="insert into area (area_id,name) values (%s,%s)"
area_value=((1,‘CN‘),(2,‘AU‘),(3,‘HK‘),(4,‘US‘))
cursor.executemany(insert_area,area_value)
2,使用cursor.fetch*()擷取並處理資料(首先要擷取資料)
sql = "select * from area"
cursor.execute(sql)
cursor.rowcout #擷取到本地的資料行數
cursor.fetchone() #第一條資料
cursor.fetchmany(3) #剩下的3條資料
cursor.fetchall() #剩下的所有資料(當以上的fetch*()都不執行時,執行cursor.fetchall()會得到表中的所有資料)
import MySQLdbtry: conn = MySQLdb.connect( host=‘192.168.10.128‘, user=‘root‘, passwd=‘123456‘, port=3306, charset=‘utf8‘) cursor = conn.cursor() conn.select_db(‘test‘) sql = "select * from area" cursor.execute(sql) print cursor.rowcount ts = cursor.fetchone() print ts ts = cursor.fetchmany(3) print ts ts = cursor.fetchall() print tsexcept Exception as e: conn.rollback() print econn.commit()cursor.close()conn.close()
輸出結果:(1L,2L,u‘Tim‘,u‘SS‘這些值的後面前面的L和u只表示資料類型長整型字元型)
5 #rowcount(1L, u‘Tim‘) #fetchone()((2L, u‘Tim‘), (3L, u‘SS‘), (4L, u‘SS‘)) #fetchmany(3)((5L, u‘SS‘),) #fetchall()
3,用cursor.fetchall()取得資料庫表名和欄位名
import MySQLdbtry: conn = MySQLdb.connect( host=‘192.168.10.128‘, user=‘root‘, passwd=‘123456‘, port=3306, charset=‘utf8‘) cursor = conn.cursor() conn.select_db(‘test‘) sql = "show tables" cursor.execute(sql) ts = cursor.fetchall() print ts sql = "select * from area" cursor.execute(sql) tm = cursor.fetchall() print tmexcept Exception as e: conn.rollback() print econn.commit()cursor.close()conn.close()
輸出結果:結果是一個tuple
((u‘area‘,), (u‘student‘,))((1L, u‘Tim‘), (2L, u‘Tim‘), (3L, u‘SS‘), (4L, u‘SS‘), (5L, u‘SS‘))
4,用把取得的值用Dict來儲存.獲得cursor的方式稍微不同:cursorDict = conn.cursor(MySQLdb.cursors.DictCursor)。
DictCursor
的這個功能是繼承於CursorDictRowsMixIn
,這個MixIn提供了3個額外的方法: fetchoneDict、fetchmanyDict、fetchallDict
import MySQLdbfrom MySQLdb.cursors import CursorDictRowsMixIntry: conn = MySQLdb.connect( host=‘192.168.10.128‘, user=‘root‘, passwd=‘123456‘, port=3306, charset=‘utf8‘) cursor = conn.cursor() cursorDict = conn.cursor(MySQLdb.cursors.DictCursor) conn.select_db(‘test‘) cursorDict.execute("select * from area") tm = cursorDict.fetchall() print tm cursorDict.execute("select * from area") tm = cursorDict.fetchallDict() print tm cursor.execute("select * from area") tm = cursor.fetchall() print tmexcept Exception as e: conn.rollback() print econn.commit()cursor.close()conn.close()
輸出結果:結果雖然也是個tuple,但是裡面還有Dict
({‘area_id‘: 1L, ‘name‘: u‘Tim‘}, {‘area_id‘: 2L, ‘name‘: u‘Tim‘}, {‘area_id‘: 3L, ‘name‘: u‘SS‘}, {‘area_id‘: 4L, ‘name‘: u‘SS‘}, {‘area_id‘: 5L, ‘name‘: u‘SS‘})({‘area_id‘: 1L, ‘name‘: u‘Tim‘}, {‘area_id‘: 2L, ‘name‘: u‘Tim‘}, {‘area_id‘: 3L, ‘name‘: u‘SS‘}, {‘area_id‘: 4L, ‘name‘: u‘SS‘}, {‘area_id‘: 5L, ‘name‘: u‘SS‘})((1L, u‘Tim‘), (2L, u‘Tim‘), (3L, u‘SS‘), (4L, u‘SS‘), (5L, u‘SS‘))
python MySQLdb使用