用MySQLdb包连接数据库

  1. 1. !/usr/bin/python
  2. 2. -- coding: utf-8 --

捣鼓捣鼓,跨过好多坑终于在Mac上配置好了开发环境,开始学Python啦!
今天学习的是Python连接数据库,安装了python-mysql包后,使用它自带的一些方法就可以连接了:
[python]

!/usr/bin/python

-- coding: utf-8 --

import sys
import MySQLdb

db = None

try:

# 连接数据库
db=MySQLdb.connect(host="localhost",
                 user="root",passwd="",
                 db="wegroup",
                 charset = "utf8",
                 unix_socket="/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock")
                 # unix_socket 
cursor = db.cursor()

# 执行一个查询
cursor.execute("SELECT VERSION()")
data = cursor.fetchone()
# 显示数据库的版本
print "Database version: %s" % data

# 创建表user(id,name) 并插入数据
cursor.execute("CREATE TABLE IF NOT EXISTS user(id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(30))")
cursor.execute("INSERT INTO user(name) VALUES('user1')")
cursor.execute("INSERT INTO user(name) VALUES('user2')")
# commit 后数据才会真正添加到数据表中!
db.commit()

# 更新数据
cursor.execute("UPDATE user SET name = %s WHERE id = %s",("xiaolai" , 2));

# 获取数据并遍历
cursor.execute("SELECT * FROM user");
# 获取描述信息
desc = cursor.description
print "描述信息:", desc
# 打印表头
print "%s %s" % (desc[0][0],desc[1][0])

# 获取结果数
count = cursor.rowcount
for i in range(count):
    row = cursor.fetchone()
    # 每一个都是一个元组
    print row[0], row[1]

finally:

# 记得要关闭!
if db:
    db.close()

[/python]

Mac OS 下MySQL配置与乱码解决

用惯了windows下xampp,打开Apache打开mysql就可以有一个本地服务器做测试了,在mac上发现:

1.xampp上的MySQL开启后,在终端输入『mysql』无反应,故在MySQL官网重装了个,终端就可以操作MySQL了;

2.MySQL默认端口是3306,两个MySQL是无法同时打开的,于是修改xampp中mysql的端口为3307(只要不冲突)就可以了:

3.初学Python,用Python连接数据库,却发现无法连接xampp中mysql的数据库,这就纳闷了,显示错误:

OperationalError: (2002, “Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)”)


修改了端口还不行么?查了好久了资料都没搞懂,stackoverflow上有类似的问题,真是个神奇的地方啊,修改xampp的配置文件:

让它能找到正确的socket,重新连接数据库,成功!

PS:除此之外,还可以在连接数据库时指定一个unix_socket使程序招到正确的sock:

[python]
conn=MySQLdb.connect(host="localhost",
user="root",passwd="",
db="wegroup",
unix_socket="/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock")

                 # unix_socket 

[/python]

 

4.因mac默认编码不是utf-8,用python操纵mysql输出数据库的中文信息显示乱码

解决办法:
在配置文件的[client]后添加default-character-set=utf8;
在[mysqld]后添加:
default-storage-engine=INNODB
character-set-server=utf8
collation-server=utf8_general_ci;
终端mysql直接查询是不出现问题了,Python文件头也声明了utf-8编码,还是没用,只好直接在MySQLdb.connect 参数中指定编码为utf8:

[python]
conn=MySQLdb.connect(host="localhost",
user="root",passwd="",
db="wegroup",
charset = "utf8",
unix_socket="/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock")

                 # unix_socket 

[/python]

如此一来,输出中文乱码的问题就解决啦: