您的位置:首页 > 编程语言 > Python开发

MYSQL Python 入门教程

2013-10-23 20:56 323 查看

MYSQL Python 入门教程

参考出处:http://www.cnblogs.com/sherlockhua/archive/2012/03/29/2423786.html
http://blog.csdn.net/kongxx/article/details/7094018

1.安装MySQLdb模块。

先在ubuntu下安装:sudo apt-get install python-mysqldb

接着为eclipse配置一下。过程为:windows->preference->pydev->interpreter-python,在Forced Builtins下面手动添加MySQLdb字段,强制编译。

2.创建一个数据库,并且创建一个测试用户。

用命令mysql -u root -p password进入mysql数据库系统。然后create database xxxx;创建一个数据库。最后创建一个测试用户,并给予相应的权限。

mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623';
Query OK, 0 rows affected (0.00 sec)
mysql> USE testdb;
Database changed
mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql> quit;
Bye


3.打印MySQL数据库版本。

#!/usr/bin/python

# -*- coding: utf-8 -*-
import MySQLdb as mdb
import sys
con = None 
try:
    con = mdb.connect('localhost', 'testuser', 
        'test623', 'testdb');
    cur = con.cursor()
    cur.execute("SELECT VERSION()")
    data = cur.fetchone()
    print "Database version : %s " % data
except mdb.Error, e:
    print "Error %d: %s" % (e.args[0],e.args[1])
    sys.exit(1)
finally:    
    if con:    
        con.close()

4.数据库建表和插入操作

import MySQLdb

conn = MySQLdb.connect (host = "172.17.23.121", user = "fkong", passwd = "fkong", db = "fkong")
cursor = conn.cursor ()

cursor.execute ("""
	CREATE TABLE TEST
	(
		ID INT,
		COL1 VARCHAR(40),
		COL2 VARCHAR(40),
		COL3 VARCHAR(40)
	)
	""")

cursor.execute ("""
	INSERT INTO TEST (ID, COL1, COL2, COL3)
	VALUES
		(1, 'a', 'b', 'c'),
		(2, 'aa', 'bb', 'cc'),
		(3, 'aaa', 'bbb', 'ccc')
	""")

conn.commit()
cursor.close ()
conn.close ()

5.查询。查询通常有两种方式:一种是使用cursor.fetchall()获取所有查询结果,然后再一行一行的迭代;另一种每次通过cursor.fetchone()获取一条记录,直到获取的结果为空为止。

import MySQLdb

conn = MySQLdb.connect (host = "172.17.23.121", user = "fkong", passwd = "fkong", db = "fkong")
cursor = conn.cursor ()

cursor.execute ("SELECT * FROM TEST")
rows = cursor.fetchall()
for row in rows:
	print "%d, %s, %s, %s" % (row[0], row[1], row[2], row[3])

print "Number of rows returned: %d" % cursor.rowcount

cursor.execute ("SELECT * FROM TEST")
while (True):
	row = cursor.fetchone()
	if row == None:
		break
	print "%d, %s, %s, %s" % (row[0], row[1], row[2], row[3])
	
print "Number of rows returned: %d" % cursor.rowcount

cursor.close ()
conn.close ()


6.字典游标

Mysqldb模块中有很多种游标类型,默认的游标以元组的元组方式返回数据。当我们使用字典游标时,数据将以python中字典形式返回。这样,我们就可以使用列名来引用数据了

#!/usr/bin/python
# -*- coding: utf-8 -*-
import MySQLdb as mdb
import sys
con = mdb.connect('localhost', 'testuser', 
    'test623', 'testdb')
with con:
    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"])


7.列名

#!/usr/bin/python
# -*- coding: utf-8 -*-
import MySQLdb as mdb
import sys
con = mdb.connect('localhost', 'testuser', 
    'test623', 'testdb')
with con:
    cur = con.cursor()
    cur.execute("SELECT * FROM Writers")
    rows = cur.fetchall()

    desc = cur.description
    print "%s %3s" % (desc[0][0], desc[1][0])
    for row in rows:    
        print "%2s %3s" % row


8.格式化语句

Python的Mysql DB接口支持5中不同的格式化方式,但MysqlDB模块只支持其中的一种,即ANSI的printf格式化方式。

#!/usr/bin/python
# -*- coding: utf-8 -*-
import MySQLdb as mdb
import sys
con = mdb.connect('localhost', 'testuser', 
    'test623', 'testdb')
with con:    
    cur = con.cursor()
    cur.execute("UPDATE Writers SET Name = %s WHERE Id = %s", 
        ("Guy de Maupasant", "4"))        
    print "Number of rows updated: %d" % cur.rowcount


9.插入图片

有人喜欢使用mysql来存储图片,而有的人喜欢把图片存储在文件系统中。而当我们要处理成千上万的图片时,会引起技术问题。图片时二进制数据,mysql有种特殊的数据类型,用来存储二进制数据,叫做BLOB(Binary Large Ojbect)。
开始之前,我们创建一个images表用来存储图片数据,代码如下:
mysql> CREATE TABLE Images(Id INT PRIMARY KEY AUTO_INCREMENT, Data MEDIUMBLOB);
Query OK, 0 rows affected (0.06 sec)
接着,我们读取图片数据,并把它插入到数据库中。

#!/usr/bin/python

# -*- coding: utf-8 -*-
import MySQLdb as mdb
import sys

try:
    fin = open("chrome.png")
    img = fin.read()
    fin.close()

except IOError, e:
    print "Error %d: %s" % (e.args[0],e.args[1])
    sys.exit(1)
try:
    conn = mdb.connect(host='localhost',user='testuser',
       passwd='test623', db='testdb')
    cursor = conn.cursor()
    cursor.execute("INSERT INTO Images SET Data='%s'" % \
        mdb.escape_string(img))
    conn.commit()
    cursor.close()
    conn.close()

except mdb.Error, e:
    print "Error %d: %s" % (e.args[0],e.args[1])
    sys.exit(1)


10.读取图片

#!/usr/bin/python

# -*- coding: utf-8 -*-
import MySQLdb as mdb 
import sys
try:
    conn = mdb.connect(host='localhost',user='testuser', 
        passwd='test623', db='testdb')
    cursor = conn.cursor()
    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:
    print "Error %d: %s" % (e.args[0],e.args[1])
    sys.exit(1)


11.事务支持

事务是数据库中的原子操作,不管要操作的数据在一个或者多个数据中。事务中的所有sql语句的结果要么全部提交,要么全部回滚。
对于支持事务的数据库, 在Python数据库编程中,当游标建立之时,就自动开始了一个隐形的数据库事务。Commit()方法游标的所有更新操作,rollback()方法回滚当前游标的所有操作。每一个方法都开始了一个新的事务。
Mysq数据库有不同的存储引擎,其中最知名的引擎是MyISAM和 InnoDb引擎。MyISAM是Mysql的默认引擎。这是在数据安全和性能之前寻求一个平衡。MysqlISAM引擎的表处理性能很高,但是不支持事务。而InnoDB引擎在数据丢失方面更安全,因为它支持事务,但是相应的表处理比较慢。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: