首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

14.3  连接

连接的过程会因为不同的数据库服务器而不同。在这一部分,您将学到如何使用三种不同的数据库模块来连接。请参考您使用的数据库服务器文档以便得到更详细的信息。

在每一个例子中,一旦您连接上了数据库,您就会有一个数据库处理的句柄(通常使用dbh来表示)。这是一个表示连接的类,并且是您访问数据库的主要接口。即使您不是运行Postgre,您也应该能非常容易地用适合您的数据库的代码替换Postgre例子中的连接代码,并取得实际的结果。

14.3.1  PostgreSQL

有几个不同的模块可以实现从Python到PostgreSQL的连接。在这一章中,我将使用psycopg,您可以从http://initd.org/software/initd/psycopg下载。psycopg模块已经被测试过,在多种平台上完全符合DB-API 2.0。

如果您没有PostgreSQL服务器,您可以从www.postgresql.org免费得到。PostgreSQL可以运行几乎所有Python支持的平台,并能提供一个标准的SQL。

psycopg connect()函数带一个字符串,该字符串包含与远程服务器建立连接所有需要的信息。在下面的例子中,是由getdsn()来产生该字符串的:

#!/usr/bin/env python

# Basic connection to PostgreSQL with psycopg - Chapter 14

# connect_psycopg.py

import psycopg

def getdsn(db = None, user = None, passwd = None, host = None):

    if user == None:

        # Default user to the one they're logged in as

        import os, pwd

        user = pwd.getpwuid(os.getuid())[0]

    if db == None:

        # Default to the username.

        db = user

dsn = 'dbname=%s user=%s' % (db, user)

    if passwd != None:

        dsn += ' password=' + passwd

    if host != None:

        dsn += ' host=' + host

    return dsn

dsn = getdsn()

print "Connecting to %s" % dsn

dbh = psycopg.connect(dsn)

print "Connection successful."

dbh.close()

14.3.2  MySQL

对于MySQL,Python的接口是已知的MySQLdb或MySQL-Python。它们可以从http://sourceforge.net/projects/mysql-python下载,并且兼容DB-API 2.0。

如果您还没有MySQL服务器,您可以从www.mysql.org得到。MySQL可以运行在多种平台上,而且它非常重视性能。

和PostgreSQL不同的是,MySQLdb connect()函数可以带各种参数,而不是仅仅一个字符串。其中重要的参数是:

l user。用户名在连接时需要提供。默认为当前登录的用户,这个和前面PostgreSQL的例子一样。

l passwd。该用户的密码。没有默认的。

l db。连接的数据库。没有默认的。

l host。数据库的主机名,如果没有指定,则连接本机器的数据库。

l port。TCP端口号。默认是3306。

下面是一个例子,它连接foo数据库,其他的参数都使用默认值。

#!/usr/bin/env python

# Basic connection to MySQL with mysqldb - Chapter 14

# connect_mysqldb.py

import MySQLdb

print "Connecting..."

dbh = MySQLdb.connect(db = "foo")

print "Connection successful."

dbh.close()

14.3.3  Jython zxJDBC

这个方法在某些方面有点不同。首先,也是最明显的,之所以不同是因为它不需要标准Python解释器。相反,它需要Jython解释器。如果您没有,您可以从www.jython.org下载。

标准的Python解释器是用C语言编写的。而Jython是用Java。这也就意味着它可以运行在任何支持Java平台上。还意味着运行在Jython下Python程序可以访问Java对象、APIs和方法。

Java提供了一个标准的连接数据库方法,称为JDBC。在概念上,JDBC和Python的DB-API类似,但是实际上的接口是完全不同的。zxJDBC模块就是DB-API和JDBC之间的桥梁。它把DB-API的调用转变为相应的JDBC调用,并把结果以DB-API格式返回。

很多不支持Python的商业数据库支持JDBC。所以,您还是可以编写轻便的Python代码来在常规的Python下运行或使用zxJDBC。使用常规DB-API模块的数据库可以被直接支持,其他的可以使用zxJDBC。

在使用zxJDBC之前,您必须调试好JDBC。首先,您必须有一个Java运行环境(JRE)。这个可以从各种卖主那里得到,而它会随着平台的不同而不同。

接下来,您需要确定您的JDBC驱动在Java上可用。很多情况下,您只需要简单地在CLASSPATH中加上一个目录或JAR文件。在不同的时候,默认设置的方法是不同的,通常您可以设置一个叫“CLASSPATH”的环境变量。

最后,您需要知道JDBC驱动模块的Java名称和用户打开连接的参数。在初始化连接时,zxJDBC会把这些值传递给Java。

下面是一个用zxJDBC建立与PostgreSQL连接的例子:

#!/usr/bin/env /jython

# Basic connection through zxJDBC to PostgreSQL - Chapter 14

# connect_zxjdbc.py

from com.ziclix.python.sql import zxJDBC

import os

dbh = zxJDBC.connect('jdbc:postgresql://localhost/foo',

        'jgoerzen', None, 'org.postgresql.Driver')

print "Connection successful."

dbh.close()

这个例子会连接本地机器上名为foo的数据库,提供的用户名为jgoerzen,并且不带密码。

如果您运行这个例子失败,而失败的信息是“寻找com.ziclix失败或驱动句柄错误(driver handler)”,就可能是因为您的Jython不包含完整的zxJDBC。您可以通过从www.jython.org下载完整的Jython来解决这个问题。

最后一点需要注意的是,在编写本书时,当前的Jython版本是与Python 2.1对应的。所以,如果您希望可以使用Jython和zxJDBC,就必须使用Python 2.1或以上版本。据说,Jython小组正在努力更新对于Python的兼容性,所以在您阅读这本书的时候,也许已经出现了新的版本。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论