锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 5.鏇村 4.鍦ㄨ繖閲岋紝鍒楄褰撲綔灞炴ф潵璁塊棶銆備笂榪頒唬鐮佺殑鈥滆儗鍚庘濆張鍙戠敓浜?jiǎn)浠涔堝憿錛熶綘鍙互鍦ㄨ繛鎺ユ爣璇嗙涓坊鍔?debug=t錛岃繖鏍鳳紝鍦ㄦ帶鍒跺彴涓皢鎵撳嵃鍑轟笅闈㈢被浼肩粨鏋滐細(xì)
SQLObject is a popular Object Relational Manager for providing an object interface to your database, with tables as classes, rows as instances, and columns as attributes.
I think the explanation is simple and enough, so let's start!
涓.瀹氫箟綾?br />1.榪炴帴鏍囪瘑絎?
scheme://[user[:password]@]host[:port]/database[?parameters]
鍏朵腑scheme鏄痵qlite, mysql, postgres, firebird, interbase, maxdb, sapdb, mssql, sybase鍏朵腑涔嬩竴錛?br />紺轟緥錛?br />mysql://user:passwd@host/database
mysql://host/database?debug=1
postgres://user@host/database?debug=&cache=
postgres://host:5432/database
sqlite:///full/path/to/database
sqlite:/C|/full/path/to/database
sqlite:/:memory:
鍙夌殑鍙傛暟錛?br />debug (榛樿鍊間負(fù)False), debugOutput (榛樿鍊間負(fù)False), cache (榛樿鍊間負(fù)True), autoCommit (榛樿鍊間負(fù)True), debugThreading (榛樿鍊間負(fù)False).
濡傛灉浣犳兂浼犻掍竴涓猅rue鍊煎埌涓涓繛鎺ユ爣璇嗙涓紝閭d箞鍙渶浼犻掍竴涓潪絀哄瓧絎︿覆灝卞彲浠ヤ簡(jiǎn)錛涚┖瀛楃涓插垯琛ㄧずFalse鍊箋?br />2.寤虹珛涓涓繛鎺?/p>
db_filename聽(tīng)
=
聽(tīng)os.path.abspath(
'
data.db
'
)
2
if
聽(tīng)os.path.exists(db_filename):
3
聽(tīng)聽(tīng)聽(tīng)聽(tīng)os.unlink(db_filename)
4
connection_string聽(tīng)
=
聽(tīng)
'
sqlite:
'
聽(tīng)
+
聽(tīng)db_filename
5
connection聽(tīng)
=
聽(tīng)connectionForURI(connection_string)
6
sqlhub.processConnection聽(tīng)
=
聽(tīng)connection
class聽(tīng)Person(SQLObject):
2聽(tīng)聽(tīng)聽(tīng)聽(tīng)firstName聽(tīng)=聽(tīng)StringCol()
3聽(tīng)聽(tīng)聽(tīng)聽(tīng)middleInitial聽(tīng)=聽(tīng)StringCol(length=1,聽(tīng)default=None)
4聽(tīng)聽(tīng)聽(tīng)聽(tīng)lastName聽(tīng)=聽(tīng)StringCol()
CREATE聽(tīng)TABLE聽(tīng)person聽(tīng)(
聽(tīng)聽(tīng)聽(tīng)聽(tīng)id聽(tīng)INT聽(tīng)PRIMARY聽(tīng)KEY聽(tīng)AUTO_INCREMENT,
聽(tīng)聽(tīng)聽(tīng)聽(tīng)first_name聽(tīng)TEXT,
聽(tīng)聽(tīng)聽(tīng)聽(tīng)middle_initial聽(tīng)CHAR(1),
聽(tīng)聽(tīng)聽(tīng)聽(tīng)last_name聽(tīng)TEXT
);
寰堢畝鍗曪紝灝變竴鍙ワ細(xì)Person.createTable()
紺轟緥涓璮irstName鍒椾負(fù)StringCol綾誨瀷錛屽綋鐒朵綘涔熷彲浠ユ崲鎴愬叾瀹冪被鍨嬨傚叿浣撳彲鍙傜収錛?br />http://www.sqlobject.org/SQLObject.html#column-types
浣犳垨璁稿凡緇忔敞鎰忓埌浜?jiǎn)鍦ňc諱腑騫舵病鏈夊畾涔塱d鍒楋紝瀹冩槸闅愬紡鐨勩傚湪MySQL涓紝瀹冭瀹氫箟鎴怚NT PRIMARY KEY AUTO_INCREMENT錛屽湪Postgres涓槸SERIAL PRIMARY KEY錛岃屽湪SQLite涓垯鏄疘NTEGER PRIMARY KEY銆備綘蹇呴』鎶婅繖浜涘煎綋浣滄槸涓嶅彲鍙樼殑銆傚綋鐒?dòng)灱屼綘涔熷彲浠ヨ鐩栤渋d鈥濊繖涓悕瀛椼?br />
浜?浣跨敤榪欎釜綾?br />1.鏈変簡(jiǎn)綾伙紝涓嬮潰浣犻渶瑕佸仛鐨勫氨鏄垱寤轟竴涓柊鐨勫璞★紙鍗蟲(chóng)柊鐨勪竴琛岋級(jí)錛岀被瀹炰緥鍖栧涓嬶細(xì)>>>聽(tīng)Person(firstName="John",聽(tīng)lastName="Doe")
<Person聽(tīng)1聽(tīng)firstName='John'聽(tīng)middleInitial=None聽(tīng)lastName='Doe'>
>>>聽(tīng)Person.get(1)
<Person聽(tīng)1聽(tīng)firstName='John'聽(tīng)middleInitial=None聽(tīng)lastName='Doe'>
>>>聽(tīng)p聽(tīng)=聽(tīng)Person.get(1)
>>>聽(tīng)p
<Person聽(tīng)1聽(tīng)firstName='John'聽(tīng)middleInitial=None聽(tīng)lastName='Doe'>
>>>聽(tīng)p.firstName
'John'
>>>聽(tīng)p.middleInitial聽(tīng)=聽(tīng)'Q'
>>>聽(tīng)p.middleInitial
'Q'
>>>聽(tīng)p2聽(tīng)=聽(tīng)Person.get(1)
>>>聽(tīng)p2
<Person聽(tīng)1聽(tīng)firstName='John'聽(tīng)middleInitial='Q'聽(tīng)lastName='Doe'>
>>>聽(tīng)p聽(tīng)is聽(tīng)p2
True
>>>聽(tīng)#聽(tīng)This聽(tīng)will聽(tīng)make聽(tīng)SQLObject聽(tīng)print聽(tīng)out聽(tīng)the聽(tīng)SQL聽(tīng)it聽(tīng)executes:
>>>聽(tīng)Person._connection.debug聽(tīng)=聽(tīng)True
>>>聽(tīng)p聽(tīng)=聽(tīng)Person(firstName='Bob',聽(tīng)lastName='Hope')
聽(tīng)1/QueryIns:聽(tīng)聽(tīng)I(yíng)NSERT聽(tīng)I(yíng)NTO聽(tīng)person聽(tīng)(last_name,聽(tīng)middle_initial,聽(tīng)first_name)聽(tīng)VALUES聽(tīng)('Hope',聽(tīng)
NULL,聽(tīng)'Bob')
聽(tīng)1/COMMIT聽(tīng)聽(tīng):聽(tīng)聽(tīng)auto
聽(tīng)1/QueryOne:聽(tīng)聽(tīng)SELECT聽(tīng)first_name,聽(tīng)middle_initial,聽(tīng)last_name聽(tīng)FROM聽(tīng)person聽(tīng)WHERE聽(tīng)id聽(tīng)=聽(tīng)2
聽(tīng)1/COMMIT聽(tīng)聽(tīng):聽(tīng)聽(tīng)auto
>>>聽(tīng)p
<Person聽(tīng)2聽(tīng)firstName='Bob'聽(tīng)middleInitial=None聽(tīng)lastName='Hope'>
>>>聽(tīng)p.middleInitial聽(tīng)=聽(tīng)'Q'
聽(tīng)1/Query聽(tīng)聽(tīng)聽(tīng):聽(tīng)聽(tīng)UPDATE聽(tīng)person聽(tīng)SET聽(tīng)middle_initial聽(tīng)=聽(tīng)'Q'聽(tīng)WHERE聽(tīng)id聽(tīng)=聽(tīng)2
聽(tīng)1/COMMIT聽(tīng)聽(tīng):聽(tīng)聽(tīng)auto
>>>聽(tīng)p2聽(tīng)=聽(tīng)Person.get(1)
>>>聽(tīng)#聽(tīng)Note:聽(tīng)no聽(tīng)database聽(tīng)access,聽(tīng)since聽(tīng)we're聽(tīng)just聽(tīng)grabbing聽(tīng)the聽(tīng)same
>>>聽(tīng)#聽(tīng)instance聽(tīng)we聽(tīng)already聽(tīng)had.
p.set(firstName='Robert',聽(tīng)lastName='Hope聽(tīng)Jr.')
錛堟湭瀹屽緟緇級(jí)
鍙傝冭祫鏂欙細(xì)http://www.sqlobject.org/SQLObject.html
]]>
鎶鏈笂錛屾病鏈夊お澶氱殑鏂版剰錛屽嚑涔庡氨鏄?strong>ftplib鐨勫熀紜搴旂敤銆傚湪寮鍙戞柟寮忎笂錛岄氳繃鍐?#8220;姝?#8221;鐨勬祴璇旸emo錛屾娊鍙栧嚭“媧?#8221;鐨勯儴鍒嗐傛暣涓凱浠h繃紼嬶紝姣旇緝鑷劧銆傛濊礬浼?xì)闅忕潃鍐欑殑榪囩▼錛岄愭笎娓呮櫚銆備竴浜涘湪璁捐涔嬪垵娌¤冭檻鍒扮殑緇嗚妭閮ㄥ垎錛屼篃浼?xì)涓旈愭笎鏄劇幇銆?br> 涓昏鍔熻兘鏈変笁涓俵ist錛屾樉紺篺tp绔欑偣鏌愮洰褰曠殑鍐呭錛沝ownload錛屼笅杞芥枃浠跺埌鎸囧畾鐩綍涓嬶紱upload錛屼笂浼犳枃浠跺埌鎸囧畾鐩綍涓嬨?br> 榪樻槸鐪嬩唬鐮侊紝姣旇緝綆鍗曘備竴瀹氱▼搴︿笂錛岃冭檻鍒頒簡(jiǎn)紼嬪簭鐨勫彲鎵╁睍鎬с?br>conf/config.xml:
modules/parseConf.py:
modules/handleFTP.py:
ftp.py :
鍛戒護(hù)琛屼笅榪愯錛?br> 1. list
python ftp.py list ftp鐩綍鍚?br> eg. python ftp.py list music
2. upload
python ftp.py upload 涓婁紶鎵瑕佷繚瀛樼殑ftp鐩綍鏂囦歡鍚?nbsp;寰呬笂浼犵殑鏈湴鏂囦歡
eg. python ftp.py upload music\remote.xml c:\local.xml
3. download
python ftp.py download 寰呬笅杞界殑榪滅▼鏂囦歡 涓嬭澆鎵瑕佷繚瀛樼殑鏈湴鐩綍鏂囦歡鍚?br> eg. python ftp.py download music\remote.xml c:\local.xml
鎴戜釜浜烘槸灝嗗疄鐜皍pload鍔熻兘鐨勫懡浠わ紝淇濆瓨鎴愪竴涓壒澶勭悊鏂囦歡銆傞渶瑕佺殑鏃跺欙紝榪愯涓嬪氨O(jiān)K浜?jiǎn)銆?br>upload.bat:
鍔熻兘姣旇緝鍗曚竴錛岃繕鏈夎澶氭瑺鑰冭檻鐨勫湴鏂廣備緥濡傚涓婁紶鏂囦歡綾誨瀷鐨勫垽鏂紝瀵逛笂浼犮佷笅杞芥枃浠舵墍鍦ㄧ洰褰曞瓨鍦ㄤ笌鍚︾殑鍒ゆ柇錛岀瓑絳夈?br> 灝忕殑涓滆タ錛屽鏋滄繁絀訛紝涔熻洰鏈夋剰鎬濄?br>
ps: 紼嬪簭鐩綍鍙?strong>copyleft閮ㄥ垎鍊熼壌浜?strong>limodou鐨?strong>Ulipad錛屽湪姝よ〃鎰熻阿銆?nbsp;