在 OSX 10.5 (Leopard) 安装 MySQL-Python

友人nicholas.ding说:

尝试安装了一下 MySQL-python,发现竟然编译不过去,在网上搜了一下,找到了一个 workaround,应该是作者疏忽了。

原文在:http://www.keningle.com/?p=11

需要下载源码自行编译,首先修改 _mysql.c,删除从 34 行开始的 3 行。

#ifndef uint
#define uint unsigned int
#endif

uint port = MYSQL_PORT;
uint client_flag = 0;

修改为

unsigned int port = MYSQL_PORT;
unsigned int client_flag = 0;

创建一个符号链接

$ sudo ln -s /usr/local/mysql/lib /usr/local/mysql/lib/mysql

最后编译安装就可以了

$ python setup.py install

在我这里这样还是不可以,最后发现还要做如下改动,原因可能是我使用了mysql官方提供的package安装mysql,结果路径有些差异造成的:
在安装前还需要修改setup_posix.py,把mysql_config.path = "mysql_config"修改为:
mysql_config.path = "/usr/local/mysql/bin/mysql_config"

然后再sudo python setup.py install就OK了。

关于存储过程和直接执行SQL对比

关于存储过程和直接执行SQL:
需要注意以下几点:
1、从数据库角度,存储过程总是要比它所对应的纯SQL要慢。
2、存储过程目的在于简化特别复杂的SQL复合应用的场景。
3、但是对于一个拥有多条SQL的存储过程来说,它可以提升效率。因为减少了SQL传输的网络延迟。所以说SQL复杂时,存储过程可以增加实际的运行效率。注意对比第1条,第一条是对应服务器调用,这条对应实际的网络环境。
4、还有就是存储过程很容易减少多条SQL之间数据传递的麻烦(有可能带来没有实际意义的中间变量),可以在服务器端把它们隐藏。
所以我想应该考虑这几点来选择存储过程:
1、拥有复杂的数据操作,需要SQL复合。
2、中间传递的临时数据过多或者过大的时候。
使用存储过程的Java代码:JDBC call Stored Procedure
CallableStatement cstmt = conn.prepareCall("{ ? = call md5( ? ) }");
// CallableStatement cstmt = conn.prepareCall("begin ? := md5( ? ); end;"); // oracle syntax
cstmt.registerOutParameter(1, Types.VARCHAR); // set out parameters
cstmt.setString(2, "idea"); // set in parameters
cstmt.execute();
String md5Str = cstmt.getString(1); // Getting OUT Parameter Values
cstmt.close();