﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-『一只小蚂蚁』的专栏-随笔分类-Python</title><link>http://www.blogjava.net/qixiangnj/category/14808.html</link><description>&lt;strong&gt;生命不息，拼搏不止。&lt;/strong&gt;</description><language>zh-cn</language><lastBuildDate>Sun, 08 Jul 2007 17:48:53 GMT</lastBuildDate><pubDate>Sun, 08 Jul 2007 17:48:53 GMT</pubDate><ttl>60</ttl><item><title>SQLObject简明教程（一）</title><link>http://www.blogjava.net/qixiangnj/archive/2006/12/04/85454.html</link><dc:creator>Thomas</dc:creator><author>Thomas</author><pubDate>Mon, 04 Dec 2006 14:17:00 GMT</pubDate><guid>http://www.blogjava.net/qixiangnj/archive/2006/12/04/85454.html</guid><wfw:comment>http://www.blogjava.net/qixiangnj/comments/85454.html</wfw:comment><comments>http://www.blogjava.net/qixiangnj/archive/2006/12/04/85454.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qixiangnj/comments/commentRss/85454.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qixiangnj/services/trackbacks/85454.html</trackback:ping><description><![CDATA[
		<p>What's SQLObject?<br /><strong>SQLObject is a popular <em>Object Relational Manager</em> for providing an object interface to your database, with tables as classes, rows as instances, and columns as attributes.</strong><br />I think the explanation is simple and enough, so let's start!<br /><br />一.定义类<br />1.连接标识符:<br />scheme://[user[:password]@]host[:port]/database[?parameters]<br />其中scheme是sqlite, mysql, postgres, firebird, interbase, maxdb, sapdb, mssql, sybase其中之一；<br />示例：<br />mysql://user:passwd@host/database<br />mysql://host/database?debug=1<br />postgres://user@host/database?debug=&amp;cache=<br />postgres://host:5432/database<br />sqlite:///full/path/to/database<br />sqlite:/C|/full/path/to/database<br />sqlite:/:memory:<br />可选的参数：<br />debug (默认值为False), debugOutput (默认值为False), cache (默认值为True), autoCommit (默认值为True), debugThreading (默认值为False).<br />如果你想传递一个True值到一个连接标识符中，那么只需传递一个非空字符串就可以了；空字符串则表示False值。<br />2.建立一个连接</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<span style="COLOR: #008080">1</span>
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">db_filename </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> os.path.abspath(</span>
				<span style="COLOR: #800000">'</span>
				<span style="COLOR: #800000">data.db</span>
				<span style="COLOR: #800000">'</span>
				<span style="COLOR: #000000">)<br /></span>
				<span style="COLOR: #008080">2</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">if</span>
				<span style="COLOR: #000000"> os.path.exists(db_filename):<br /></span>
				<span style="COLOR: #008080">3</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    os.unlink(db_filename)<br /></span>
				<span style="COLOR: #008080">4</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />connection_string </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #800000">'</span>
				<span style="COLOR: #800000">sqlite:</span>
				<span style="COLOR: #800000">'</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> db_filename<br /></span>
				<span style="COLOR: #008080">5</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />connection </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> connectionForURI(connection_string)<br /></span>
				<span style="COLOR: #008080">6</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />sqlhub.processConnection </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> connection</span>
		</div>3.生成一个简单的“地址薄”数据库，我们定义如下类：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Person(SQLObject):<br /></span><span style="COLOR: #008080">2</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    firstName </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> StringCol()<br /></span><span style="COLOR: #008080">3</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    middleInitial </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> StringCol(length</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">, default</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">None)<br /></span><span style="COLOR: #008080">4</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    lastName </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> StringCol()</span></div>这个类对应的数据库Scheme如下：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">CREATE</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">TABLE</span><span style="COLOR: #000000"> person (<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    id </span><span style="FONT-WEIGHT: bold; COLOR: #000000">INT</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">PRIMARY</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">KEY</span><span style="COLOR: #000000"> AUTO_INCREMENT,<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    first_name </span><span style="FONT-WEIGHT: bold; COLOR: #000000">TEXT</span><span style="COLOR: #000000">,<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    middle_initial </span><span style="FONT-WEIGHT: bold; COLOR: #000000">CHAR</span><span style="COLOR: #000000">(</span><span style="FONT-WEIGHT: bold; COLOR: #800000">1</span><span style="COLOR: #000000">),<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    last_name </span><span style="FONT-WEIGHT: bold; COLOR: #000000">TEXT</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />);</span></div>4.创建数据库表<br />很简单，就一句：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">Person.createTable()</span></div><p>5.更多<br />示例中firstName列为StringCol类型，当然你也可以换成其它类型。具体可参照：<br /><a href="http://www.sqlobject.org/SQLObject.html#column-types">http://www.sqlobject.org/SQLObject.html#column-types</a><br />你或许已经注意到了在类中并没有定义id列，它是隐式的。在MySQL中，它被定义成INT PRIMARY KEY AUTO_INCREMENT，在Postgres中是SERIAL PRIMARY KEY，而在SQLite中则是INTEGER PRIMARY KEY。你必须把这些值当作是不可变的。当然，你也可以覆盖“id”这个名字。<br /><br />二.使用这个类<br />1.有了类，下面你需要做的就是创建一个新的对象（即新的一行），类实例化如下：</p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">&gt;&gt;&gt;</span><span style="COLOR: #000000"> Person(firstName</span><span style="COLOR: #000000">=</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">John</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">, lastName</span><span style="COLOR: #000000">=</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">Doe</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">)<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Person </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000"> firstName</span><span style="COLOR: #000000">=</span><span style="COLOR: #800000">'</span><span style="COLOR: #800000">John</span><span style="COLOR: #800000">'</span><span style="COLOR: #000000"> middleInitial</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">None lastName</span><span style="COLOR: #000000">=</span><span style="COLOR: #800000">'</span><span style="COLOR: #800000">Doe</span><span style="COLOR: #800000">'</span><span style="COLOR: #000000">&gt;</span></div>2.你可以用get()方法取出已经存在的某行：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">&gt;&gt;&gt;</span><span style="COLOR: #000000"> Person.get(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Person </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000"> firstName</span><span style="COLOR: #000000">=</span><span style="COLOR: #800000">'</span><span style="COLOR: #800000">John</span><span style="COLOR: #800000">'</span><span style="COLOR: #000000"> middleInitial</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">None lastName</span><span style="COLOR: #000000">=</span><span style="COLOR: #800000">'</span><span style="COLOR: #800000">Doe</span><span style="COLOR: #800000">'</span><span style="COLOR: #000000">&gt;</span></div>3.这是一个略长些的例子：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">&gt;&gt;&gt;</span><span style="COLOR: #000000"> p </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> Person.get(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">&gt;&gt;&gt;</span><span style="COLOR: #000000"> p<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Person </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000"> firstName</span><span style="COLOR: #000000">=</span><span style="COLOR: #800000">'</span><span style="COLOR: #800000">John</span><span style="COLOR: #800000">'</span><span style="COLOR: #000000"> middleInitial</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">None lastName</span><span style="COLOR: #000000">=</span><span style="COLOR: #800000">'</span><span style="COLOR: #800000">Doe</span><span style="COLOR: #800000">'</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">&gt;&gt;&gt;</span><span style="COLOR: #000000"> p.firstName<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #800000">'</span><span style="COLOR: #800000">John</span><span style="COLOR: #800000">'</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">&gt;&gt;&gt;</span><span style="COLOR: #000000"> p.middleInitial </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #800000">'</span><span style="COLOR: #800000">Q</span><span style="COLOR: #800000">'</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">&gt;&gt;&gt;</span><span style="COLOR: #000000"> p.middleInitial<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #800000">'</span><span style="COLOR: #800000">Q</span><span style="COLOR: #800000">'</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">&gt;&gt;&gt;</span><span style="COLOR: #000000"> p2 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> Person.get(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">&gt;&gt;&gt;</span><span style="COLOR: #000000"> p2<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Person </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000"> firstName</span><span style="COLOR: #000000">=</span><span style="COLOR: #800000">'</span><span style="COLOR: #800000">John</span><span style="COLOR: #800000">'</span><span style="COLOR: #000000"> middleInitial</span><span style="COLOR: #000000">=</span><span style="COLOR: #800000">'</span><span style="COLOR: #800000">Q</span><span style="COLOR: #800000">'</span><span style="COLOR: #000000"> lastName</span><span style="COLOR: #000000">=</span><span style="COLOR: #800000">'</span><span style="COLOR: #800000">Doe</span><span style="COLOR: #800000">'</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">&gt;&gt;&gt;</span><span style="COLOR: #000000"> p </span><span style="COLOR: #0000ff">is</span><span style="COLOR: #000000"> p2<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />True</span></div><p>4.在这里，列被当作属性来访问。上述代码的“背后”又发生了什么呢？你可以在连接标识符中添加?debug=t，这样，在控制台中将打印出下面类似结果：</p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">&gt;&gt;&gt;</span><span style="COLOR: #000000"> </span><span style="COLOR: #008000">#</span><span style="COLOR: #008000"> This will make SQLObject print out the SQL it executes:</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">&gt;&gt;&gt;</span><span style="COLOR: #000000"> Person._connection.debug </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> True<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">&gt;&gt;&gt;</span><span style="COLOR: #000000"> p </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> Person(firstName</span><span style="COLOR: #000000">=</span><span style="COLOR: #800000">'</span><span style="COLOR: #800000">Bob</span><span style="COLOR: #800000">'</span><span style="COLOR: #000000">, lastName</span><span style="COLOR: #000000">=</span><span style="COLOR: #800000">'</span><span style="COLOR: #800000">Hope</span><span style="COLOR: #800000">'</span><span style="COLOR: #000000">)<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">QueryIns:  INSERT INTO person (last_name, middle_initial, first_name) VALUES (</span><span style="COLOR: #800000">'</span><span style="COLOR: #800000">Hope</span><span style="COLOR: #800000">'</span><span style="COLOR: #000000">, <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />NULL, </span><span style="COLOR: #800000">'</span><span style="COLOR: #800000">Bob</span><span style="COLOR: #800000">'</span><span style="COLOR: #000000">)<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">COMMIT  :  auto<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">QueryOne:  SELECT first_name, middle_initial, last_name FROM person WHERE id </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">2</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">COMMIT  :  auto<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">&gt;&gt;&gt;</span><span style="COLOR: #000000"> p<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Person </span><span style="COLOR: #000000">2</span><span style="COLOR: #000000"> firstName</span><span style="COLOR: #000000">=</span><span style="COLOR: #800000">'</span><span style="COLOR: #800000">Bob</span><span style="COLOR: #800000">'</span><span style="COLOR: #000000"> middleInitial</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">None lastName</span><span style="COLOR: #000000">=</span><span style="COLOR: #800000">'</span><span style="COLOR: #800000">Hope</span><span style="COLOR: #800000">'</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">&gt;&gt;&gt;</span><span style="COLOR: #000000"> p.middleInitial </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #800000">'</span><span style="COLOR: #800000">Q</span><span style="COLOR: #800000">'</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">Query   :  UPDATE person SET middle_initial </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #800000">'</span><span style="COLOR: #800000">Q</span><span style="COLOR: #800000">'</span><span style="COLOR: #000000"> WHERE id </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">2</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">COMMIT  :  auto<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">&gt;&gt;&gt;</span><span style="COLOR: #000000"> p2 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> Person.get(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">&gt;&gt;&gt;</span><span style="COLOR: #000000"> </span><span style="COLOR: #008000">#</span><span style="COLOR: #008000"> Note: no database access, since we're just grabbing the same</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">&gt;&gt;&gt;</span><span style="COLOR: #000000"> </span><span style="COLOR: #008000">#</span><span style="COLOR: #008000"> instance we already had.</span></div>上述代码，可以清晰地看出“后台”所做的事情。<br />5.作为一个小小的优化，你可以将独立地指定每个属性值，换成一次指定多个值，使用set方法：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">p.set(firstName</span><span style="COLOR: #000000">=</span><span style="COLOR: #800000">'</span><span style="COLOR: #800000">Robert</span><span style="COLOR: #800000">'</span><span style="COLOR: #000000">, lastName</span><span style="COLOR: #000000">=</span><span style="COLOR: #800000">'</span><span style="COLOR: #800000">Hope Jr.</span><span style="COLOR: #800000">'</span><span style="COLOR: #000000">)</span></div><br />（未完待续）<br /><br />参考资料：<a href="http://www.sqlobject.org/SQLObject.html">http://www.sqlobject.org/SQLObject.html</a><img src ="http://www.blogjava.net/qixiangnj/aggbug/85454.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qixiangnj/" target="_blank">Thomas</a> 2006-12-04 22:17 <a href="http://www.blogjava.net/qixiangnj/archive/2006/12/04/85454.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个FTP小工具</title><link>http://www.blogjava.net/qixiangnj/archive/2006/11/19/82071.html</link><dc:creator>Thomas</dc:creator><author>Thomas</author><pubDate>Sun, 19 Nov 2006 11:25:00 GMT</pubDate><guid>http://www.blogjava.net/qixiangnj/archive/2006/11/19/82071.html</guid><wfw:comment>http://www.blogjava.net/qixiangnj/comments/82071.html</wfw:comment><comments>http://www.blogjava.net/qixiangnj/archive/2006/11/19/82071.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qixiangnj/comments/commentRss/82071.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qixiangnj/services/trackbacks/82071.html</trackback:ping><description><![CDATA[<p>&nbsp; <a href="http://hi.baidu.com/qixiang">百度空间</a>上的背景音乐时不时会更新下，每次都是通过FlashFXP上传的。又是登录，又是选择目录的，着实麻烦。于是写了这个小工具。<br>&nbsp; 开发环境：Eclipse3.2+Pydev+Python2.4<br>&nbsp;&nbsp;技术上，没有太多的新意，几乎就是<strong>ftplib</strong>的基础应用。在开发方式上，通过写&#8220;死&#8221;的测试Demo，抽取出&#8220;活&#8221;的部分。整个迭代过程，比较自然。思路会随着写的过程，逐渐清晰。一些在设计之初没考虑到的细节部分，也会中途逐渐显现。<br>&nbsp; 主要功能有三个。list，显示ftp站点某目录的内容；download，下载文件到指定目录下；upload，上传文件到指定目录下。<br>&nbsp; 还是看代码，比较简单。一定程度上，考虑到了程序的可扩展性。<br><strong>conf/config.xml:</strong></p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;">
<span style="color: #008080;">1</span>
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">
<span style="color: #0000ff;">&lt;?</span>
<span style="color: #ff00ff;">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span>
<span style="color: #0000ff;">?&gt;</span>
<span style="color: #000000;">
<br>
</span>
<span style="color: #008080;">2</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">
</span>
<span style="color: #0000ff;">&lt;</span>
<span style="color: #800000;">configuration</span>
<span style="color: #0000ff;">&gt;</span>
<span style="color: #000000;">
<br>
</span>
<span style="color: #008080;">3</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">
</span>
<span style="color: #0000ff;">&lt;</span>
<span style="color: #800000;">host</span>
<span style="color: #0000ff;">&gt;</span>
<span style="color: #000000;">10.0.0.1</span>
<span style="color: #0000ff;">&lt;/</span>
<span style="color: #800000;">host</span>
<span style="color: #0000ff;">&gt;</span>
<span style="color: #000000;">
<br>
</span>
<span style="color: #008080;">4</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">
</span>
<span style="color: #0000ff;">&lt;</span>
<span style="color: #800000;">user</span>
<span style="color: #0000ff;">&gt;</span>
<span style="color: #000000;">username</span>
<span style="color: #0000ff;">&lt;/</span>
<span style="color: #800000;">user</span>
<span style="color: #0000ff;">&gt;</span>
<span style="color: #000000;">
<br>
</span>
<span style="color: #008080;">5</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">
</span>
<span style="color: #0000ff;">&lt;</span>
<span style="color: #800000;">password</span>
<span style="color: #0000ff;">&gt;</span>
<span style="color: #000000;">password</span>
<span style="color: #0000ff;">&lt;/</span>
<span style="color: #800000;">password</span>
<span style="color: #0000ff;">&gt;</span>
<span style="color: #000000;">
<br>
</span>
<span style="color: #008080;">6</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">
</span>
<span style="color: #0000ff;">&lt;/</span>
<span style="color: #800000;">configuration</span>
<span style="color: #0000ff;">&gt;</span>
</div>
<br>
<p>
<strong>modules/parseConf.py:</strong>
</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;">
<strong>
<span style="color: #008080;">&nbsp;1</span>
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">
<span style="color: #008000;">#</span>
<span style="color: #008000;">&nbsp;&nbsp;&nbsp;Programmer:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;qixiang</span>
</strong>
<span style="color: #008000;">
<br>
</span>
<strong>
<span style="color: #008080;">&nbsp;2</span>
<span style="color: #008000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">#</span>
<span style="color: #008000;">&nbsp;&nbsp;&nbsp;E-mail:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mail2qixiang&nbsp;AT&nbsp;gmail&nbsp;DOT&nbsp;com</span>
</strong>
<span style="color: #008000;">
<br>
</span>
<span style="color: #008080;">
<strong>&nbsp;3</strong>
</span>
<strong>
<span style="color: #008000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">#<br></span>
<span style="color: #008080;">&nbsp;4</span>
<span style="color: #008000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">#</span>
<span style="color: #008000;">&nbsp;&nbsp;&nbsp;Copyleft&nbsp;2006&nbsp;qixiang</span>
</strong>
<span style="color: #008000;">
<br>
</span>
<span style="color: #008080;">
<strong>&nbsp;5</strong>
</span>
<strong>
<span style="color: #008000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">#<br></span>
<span style="color: #008080;">&nbsp;6</span>
<span style="color: #008000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">#</span>
<span style="color: #008000;">&nbsp;&nbsp;&nbsp;modules/parseConf.py&nbsp;2006-11-19&nbsp;03:56:15&nbsp;qixiang</span>
</strong>
<span style="color: #008000;">
<br>
</span>
<strong>
<span style="color: #008080;">&nbsp;7</span>
<span style="color: #008000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">
</span>
</strong>
<span style="color: #000000;">
<br>
</span>
<strong>
<span style="color: #008080;">&nbsp;8</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">
</span>
<span style="color: #0000ff;">def</span>
</strong>
<strong>
<span style="color: #000000;">&nbsp;getNodeValue(filename,&nbsp;nodename):<br></span>
<span style="color: #008080;">&nbsp;9</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">from</span>
<span style="color: #000000;">&nbsp;xml.dom&nbsp;</span>
<span style="color: #0000ff;">import</span>
</strong>
<strong>
<span style="color: #000000;">&nbsp;minidom<br></span>
<span style="color: #008080;">10</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;xmldoc&nbsp;</span>
<span style="color: #000000;">=</span>
</strong>
<strong>
<span style="color: #000000;">&nbsp;minidom.parse(filename)<br></span>
<span style="color: #008080;">11</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;nodeValue&nbsp;</span>
<span style="color: #000000;">=</span>
</strong>
<strong>
<span style="color: #000000;">&nbsp;xmldoc.getElementsByTagName(nodename)[0].firstChild.data<br></span>
<span style="color: #008080;">12</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">return</span>
<span style="color: #000000;">&nbsp;nodeValue</span>
</strong>
</div>
<p>
<strong>modules/handleFTP.py:</strong>
</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;">
<strong>
<span style="color: #008080;">&nbsp;1</span>
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">
<span style="color: #008000;">#</span>
<span style="color: #008000;">&nbsp;&nbsp;&nbsp;Programmer:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;qixiang</span>
</strong>
<span style="color: #008000;">
<br>
</span>
<strong>
<span style="color: #008080;">&nbsp;2</span>
<span style="color: #008000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">#</span>
<span style="color: #008000;">&nbsp;&nbsp;&nbsp;E-mail:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mail2qixiang&nbsp;AT&nbsp;gmail&nbsp;DOT&nbsp;com</span>
</strong>
<span style="color: #008000;">
<br>
</span>
<span style="color: #008080;">
<strong>&nbsp;3</strong>
</span>
<strong>
<span style="color: #008000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">#<br></span>
<span style="color: #008080;">&nbsp;4</span>
<span style="color: #008000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">#</span>
<span style="color: #008000;">&nbsp;&nbsp;&nbsp;Copyleft&nbsp;2006&nbsp;qixiang</span>
</strong>
<span style="color: #008000;">
<br>
</span>
<span style="color: #008080;">
<strong>&nbsp;5</strong>
</span>
<strong>
<span style="color: #008000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">#<br></span>
<span style="color: #008080;">&nbsp;6</span>
<span style="color: #008000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">#</span>
<span style="color: #008000;">&nbsp;&nbsp;&nbsp;modules/handleFTP.py&nbsp;2006-11-19&nbsp;04:04:25&nbsp;qixiang</span>
</strong>
<span style="color: #008000;">
<br>
</span>
<strong>
<span style="color: #008080;">&nbsp;7</span>
<span style="color: #008000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">
</span>
</strong>
<span style="color: #000000;">
<br>
</span>
<strong>
<span style="color: #008080;">&nbsp;8</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">
</span>
<span style="color: #0000ff;">from</span>
<span style="color: #000000;">&nbsp;ftplib&nbsp;</span>
<span style="color: #0000ff;">import</span>
</strong>
<strong>
<span style="color: #000000;">&nbsp;FTP<br></span>
<span style="color: #008080;">&nbsp;9</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">
</span>
<span style="color: #0000ff;">def</span>
</strong>
<strong>
<span style="color: #000000;">&nbsp;login(host,&nbsp;user,&nbsp;password):<br></span>
<span style="color: #008080;">10</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">try</span>
</strong>
<strong>
<span style="color: #000000;">:<br></span>
<span style="color: #008080;">11</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ftp&nbsp;</span>
<span style="color: #000000;">=</span>
</strong>
<strong>
<span style="color: #000000;">&nbsp;FTP(host)<br></span>
<span style="color: #008080;">12</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #008000;">#</span>
<span style="color: #008000;">print&nbsp;'connect&nbsp;successfully'</span>
</strong>
<span style="color: #008000;">
<br>
</span>
<strong>
<span style="color: #008080;">13</span>
<span style="color: #008000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">
</span>
<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">try</span>
</strong>
<strong>
<span style="color: #000000;">:<br></span>
<span style="color: #008080;">14</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ftp.login(user</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">user,&nbsp;passwd</span>
<span style="color: #000000;">=</span>
</strong>
<strong>
<span style="color: #000000;">password)<br></span>
<span style="color: #008080;">15</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #008000;">#</span>
<span style="color: #008000;">print&nbsp;'login&nbsp;successfully'</span>
</strong>
<span style="color: #008000;">
<br>
</span>
<strong>
<span style="color: #008080;">16</span>
<span style="color: #008000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">
</span>
<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">return</span>
</strong>
<strong>
<span style="color: #000000;">&nbsp;ftp<br></span>
<span style="color: #008080;">17</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">except</span>
</strong>
<strong>
<span style="color: #000000;">:<br></span>
<span style="color: #008080;">18</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">print</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #800000;">'</span>
<span style="color: #800000;">incorrect&nbsp;user&nbsp;or&nbsp;password</span>
<span style="color: #800000;">'</span>
</strong>
<span style="color: #000000;">
<br>
</span>
<strong>
<span style="color: #008080;">19</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">except</span>
</strong>
<strong>
<span style="color: #000000;">:<br></span>
<span style="color: #008080;">20</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">print</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #800000;">'</span>
<span style="color: #800000;">unconnected&nbsp;host</span>
<span style="color: #800000;">'</span>
</strong>
<span style="color: #000000;">
<br>
</span>
<span style="color: #008080;">
<strong>21</strong>
</span>
<strong>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">
<br>
</span>
<span style="color: #008080;">22</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">
</span>
<span style="color: #0000ff;">def</span>
</strong>
<strong>
<span style="color: #000000;">&nbsp;list(ftp,&nbsp;ftpDirectory):<br></span>
<span style="color: #008080;">23</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">try</span>
</strong>
<strong>
<span style="color: #000000;">:<br></span>
<span style="color: #008080;">24</span>
</strong>
<strong>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ftp.cwd(ftpDirectory)<br></span>
<span style="color: #008080;">25</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ftp.retrlines(</span>
<span style="color: #800000;">'</span>
<span style="color: #800000;">LIST</span>
<span style="color: #800000;">'</span>
</strong>
<strong>
<span style="color: #000000;">)<br></span>
<span style="color: #008080;">26</span>
</strong>
<strong>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ftp.close()<br></span>
<span style="color: #008080;">27</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">except</span>
</strong>
<strong>
<span style="color: #000000;">:<br></span>
<span style="color: #008080;">28</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">print</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #800000;">'</span>
<span style="color: #800000;">incorrect&nbsp;directory</span>
<span style="color: #800000;">'</span>
</strong>
<span style="color: #000000;">
<br>
</span>
<span style="color: #008080;">
<strong>29</strong>
</span>
<strong>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span>
<span style="color: #008080;">30</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">
</span>
<span style="color: #0000ff;">def</span>
</strong>
<strong>
<span style="color: #000000;">&nbsp;upload(ftp,&nbsp;remoteFile,&nbsp;localFile):<br></span>
<span style="color: #008080;">31</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">try</span>
</strong>
<strong>
<span style="color: #000000;">:<br></span>
<span style="color: #008080;">32</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ftp.storlines(</span>
<span style="color: #800000;">'</span>
<span style="color: #800000;">STOR&nbsp;</span>
<span style="color: #800000;">'</span>
<span style="color: #000000;">+</span>
</strong>
<strong>
<span style="color: #000000;">remoteFile,&nbsp;open(localFile))<br></span>
<span style="color: #008080;">33</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">print</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #800000;">'</span>
<span style="color: #800000;">upload&nbsp;successfully</span>
<span style="color: #800000;">'</span>
</strong>
<span style="color: #000000;">
<br>
</span>
<strong>
<span style="color: #008080;">34</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">print</span>
</strong>
<span style="color: #000000;">
<br>
</span>
<strong>
<span style="color: #008080;">35</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ftp.retrlines(</span>
<span style="color: #800000;">'</span>
<span style="color: #800000;">LIST</span>
<span style="color: #800000;">'</span>
</strong>
<strong>
<span style="color: #000000;">)<br></span>
<span style="color: #008080;">36</span>
</strong>
<strong>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ftp.close()<br></span>
<span style="color: #008080;">37</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">except</span>
</strong>
<strong>
<span style="color: #000000;">:<br></span>
<span style="color: #008080;">38</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">print</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #800000;">'</span>
<span style="color: #800000;">incorrect&nbsp;remoteFile&nbsp;or&nbsp;localFile</span>
<span style="color: #800000;">'</span>
</strong>
<span style="color: #000000;">
<br>
</span>
<span style="color: #008080;">
<strong>39</strong>
</span>
<strong>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">
<br>
</span>
<span style="color: #008080;">40</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">
</span>
<span style="color: #0000ff;">def</span>
</strong>
<strong>
<span style="color: #000000;">&nbsp;download(ftp,&nbsp;remoteFile,&nbsp;localFile):<br></span>
<span style="color: #008080;">41</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">try</span>
</strong>
<strong>
<span style="color: #000000;">:<br></span>
<span style="color: #008080;">42</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ftp.retrlines(</span>
<span style="color: #800000;">'</span>
<span style="color: #800000;">RETR&nbsp;</span>
<span style="color: #800000;">'</span>
<span style="color: #000000;">+</span>
<span style="color: #000000;">remoteFile,&nbsp;open(localFile,&nbsp;</span>
<span style="color: #800000;">"</span>
<span style="color: #800000;">w</span>
<span style="color: #800000;">"</span>
</strong>
<strong>
<span style="color: #000000;">).write)&nbsp;&nbsp;&nbsp;<br></span>
<span style="color: #008080;">43</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">print</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #800000;">'</span>
<span style="color: #800000;">download&nbsp;successfully</span>
<span style="color: #800000;">'</span>
</strong>
<strong>
<span style="color: #000000;">&nbsp;<br></span>
<span style="color: #008080;">44</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">print</span>
</strong>
<span style="color: #000000;">
<br>
</span>
<strong>
<span style="color: #008080;">45</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ftp.retrlines(</span>
<span style="color: #800000;">'</span>
<span style="color: #800000;">LIST</span>
<span style="color: #800000;">'</span>
</strong>
<strong>
<span style="color: #000000;">)<br></span>
<span style="color: #008080;">46</span>
</strong>
<strong>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ftp.close()<br></span>
<span style="color: #008080;">47</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">except</span>
</strong>
<strong>
<span style="color: #000000;">:<br></span>
<span style="color: #008080;">48</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: #0000ff;">print</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #800000;">'</span>
<span style="color: #800000;">incorrect&nbsp;remoteFile&nbsp;or&nbsp;localFile</span>
<span style="color: #800000;">'</span>
</strong>
</div>
<p>
<strong>ftp.py</strong>
<strong>:</strong>
</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;">
<strong>
<span style="color: #008080;">&nbsp;1</span>
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">
<span style="color: #008000;">#</span>
<span style="color: #008000;">&nbsp;&nbsp;&nbsp;Programmer:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;qixiang</span>
</strong>
<span style="color: #008000;">
<br>
</span>
<strong>
<span style="color: #008080;">&nbsp;2</span>
<span style="color: #008000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">#</span>
<span style="color: #008000;">&nbsp;&nbsp;&nbsp;E-mail:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mail2qixiang&nbsp;AT&nbsp;gmail&nbsp;DOT&nbsp;com</span>
</strong>
<span style="color: #008000;">
<br>
</span>
<span style="color: #008080;">
<strong>&nbsp;3</strong>
</span>
<strong>
<span style="color: #008000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">#<br></span>
<span style="color: #008080;">&nbsp;4</span>
<span style="color: #008000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">#</span>
<span style="color: #008000;">&nbsp;&nbsp;&nbsp;Copyleft&nbsp;2006&nbsp;qixiang</span>
</strong>
<span style="color: #008000;">
<br>
</span>
<span style="color: #008080;">
<strong>&nbsp;5</strong>
</span>
<strong>
<span style="color: #008000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">#<br></span>
<span style="color: #008080;">&nbsp;6</span>
<span style="color: #008000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">#</span>
<span style="color: #008000;">&nbsp;&nbsp;&nbsp;ftp.py&nbsp;2006-11-19&nbsp;04:04:54&nbsp;qixiang</span>
</strong>
<span style="color: #008000;">
<br>
</span>
<strong>
<span style="color: #008080;">&nbsp;7</span>
<span style="color: #008000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">
</span>
</strong>
<span style="color: #000000;">
<br>
</span>
<strong>
<span style="color: #008080;">&nbsp;8</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">
</span>
<span style="color: #0000ff;">import</span>
</strong>
<strong>
<span style="color: #000000;">&nbsp;sys<br></span>
<span style="color: #008080;">&nbsp;9</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">
</span>
<span style="color: #0000ff;">from</span>
<span style="color: #000000;">&nbsp;modules.parseConf&nbsp;</span>
<span style="color: #0000ff;">import</span>
</strong>
<strong>
<span style="color: #000000;">&nbsp;getNodeValue<br></span>
<span style="color: #008080;">10</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">
</span>
<span style="color: #0000ff;">from</span>
<span style="color: #000000;">&nbsp;modules.handleFTP&nbsp;</span>
<span style="color: #0000ff;">import</span>
</strong>
<strong>
<span style="color: #000000;">&nbsp;login,&nbsp;list,&nbsp;upload,&nbsp;download<br></span>
<span style="color: #008080;">11</span>
</strong>
<strong>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">
<br>
</span>
<span style="color: #008080;">12</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">configFile&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #800000;">'</span>
<span style="color: #800000;">conf/config.xml</span>
<span style="color: #800000;">'</span>
</strong>
<span style="color: #000000;">
<br>
</span>
<strong>
<span style="color: #008080;">13</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">flag&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;sys.argv[</span>
<span style="color: #000000;">1</span>
</strong>
<strong>
<span style="color: #000000;">]<br></span>
<span style="color: #008080;">14</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">ftp&nbsp;</span>
<span style="color: #000000;">=</span>
<span style="color: #000000;">&nbsp;login(getNodeValue(configFile,&nbsp;</span>
<span style="color: #800000;">'</span>
<span style="color: #800000;">host</span>
<span style="color: #800000;">'</span>
<span style="color: #000000;">),&nbsp;getNodeValue(configFile,&nbsp;</span>
<span style="color: #800000;">'</span>
<span style="color: #800000;">user</span>
<span style="color: #800000;">'</span>
<span style="color: #000000;">),&nbsp;getNodeValue(configFile,&nbsp;</span>
<span style="color: #800000;">'</span>
<span style="color: #800000;">password</span>
<span style="color: #800000;">'</span>
</strong>
<strong>
<span style="color: #000000;">))<br></span>
<span style="color: #008080;">15</span>
</strong>
<strong>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">
<br>
</span>
<span style="color: #008080;">16</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">
</span>
<span style="color: #0000ff;">if</span>
<span style="color: #000000;">&nbsp;flag&nbsp;</span>
<span style="color: #000000;">==</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #800000;">'</span>
<span style="color: #800000;">list</span>
<span style="color: #800000;">'</span>
</strong>
<strong>
<span style="color: #000000;">:<br></span>
<span style="color: #008080;">17</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;list(ftp,&nbsp;sys.argv[</span>
<span style="color: #000000;">2</span>
</strong>
<strong>
<span style="color: #000000;">])<br></span>
<span style="color: #008080;">18</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">
</span>
<span style="color: #0000ff;">if</span>
<span style="color: #000000;">&nbsp;flag&nbsp;</span>
<span style="color: #000000;">==</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #800000;">'</span>
<span style="color: #800000;">upload</span>
<span style="color: #800000;">'</span>
</strong>
<strong>
<span style="color: #000000;">:<br></span>
<span style="color: #008080;">19</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;upload(ftp,&nbsp;sys.argv[</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">],&nbsp;sys.argv[</span>
<span style="color: #000000;">3</span>
</strong>
<strong>
<span style="color: #000000;">])<br></span>
<span style="color: #008080;">20</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">
</span>
<span style="color: #0000ff;">if</span>
<span style="color: #000000;">&nbsp;flag&nbsp;</span>
<span style="color: #000000;">==</span>
<span style="color: #000000;">&nbsp;</span>
<span style="color: #800000;">'</span>
<span style="color: #800000;">download</span>
<span style="color: #800000;">'</span>
</strong>
<strong>
<span style="color: #000000;">:<br></span>
<span style="color: #008080;">21</span>
<span style="color: #000000;">
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;download(ftp,&nbsp;sys.argv[</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">],&nbsp;sys.argv[</span>
<span style="color: #000000;">3</span>
<span style="color: #000000;">])</span>
</strong>
</div>
<p>&nbsp; 命令行下运行：<br>&nbsp; 1. list<br>&nbsp;&nbsp;python ftp.py list ftp目录名<br>&nbsp; eg. python ftp.py list&nbsp;music<br><br>&nbsp; 2. upload<br>&nbsp; python ftp.py upload&nbsp;上传所要保存的ftp目录文件名&nbsp;待上传的本地文件<br>&nbsp; eg. python ftp.py upload music\remote.xml c:\local.xml<br><br>&nbsp; 3. download<br>&nbsp; python ftp.py download&nbsp;待下载的远程文件 下载所要保存的本地目录文件名<br>&nbsp;&nbsp;eg. python ftp.py download music\remote.xml c:\local.xml<br><br>&nbsp;&nbsp;我个人是将实现upload功能的命令，保存成一个批处理文件。需要的时候，运行下就OK了。<br><strong>upload.bat:</strong></p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;">
<strong>
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">
</strong>
<span style="color: #000000;">
<strong>d:<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">cd&nbsp;java/eclipse/workspace/ftp<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">python&nbsp;ftp.py&nbsp;upload&nbsp;music\mp3player.xml&nbsp;f:\website\music\mp3player.xml</strong>
</span>
</div>
<br>
<p>
<strong>&nbsp;&nbsp;</strong>功能比较单一，还有许多欠考虑的地方。例如对上传文件类型的判断，对上传、下载文件所在目录存在与否的判断，等等。<br>&nbsp; 小的东西，如果深究，也蛮有意思。<br><br>&nbsp; ps:&nbsp;程序目录及<strong>copyleft</strong>部分借鉴了<strong>limodou</strong>的<strong>Ulipad</strong>，在此表感谢。&nbsp;&nbsp;<br>&nbsp; </p><img src ="http://www.blogjava.net/qixiangnj/aggbug/82071.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qixiangnj/" target="_blank">Thomas</a> 2006-11-19 19:25 <a href="http://www.blogjava.net/qixiangnj/archive/2006/11/19/82071.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>