ID English原文 中文翻译 最近翻译记录 状态 操作
0#翻译 =================== ORM API =================== 翻译 902天前 翻译
1#翻译 created by Massimo Di Pierro 翻译 902天前 翻译
2#翻译 Examples --------- 翻译 902天前 翻译
3#翻译 .. syntax:: pycon :: >>> db=SQLDB("sqlite://test.db") >>> #OR db=SQLDB("mysql://username:password@host:port/dbname") >>> #OR db=SQLDB("postgres://username:password@host:port/dbname") # syntax: SQLField('fieldname','fieldtype',length=32, # required=False, default=None, # requires=[IS_EMAIL(error_message='invalid email')]) >>> tmp=db.define_table('users',\ SQLField('stringfield','string',length=32,required=True),\ SQLField('booleanfield','boolean',default=False),\ SQLField('passwordfield','password'),\ SQLField('textfield','text'),\ SQLField('blobfield','blob'),\ SQLField('uploadfield','upload'),\ SQLField('integerfield','integer'),\ SQLField('doublefield','double'),\ SQLField('datefield','date',default=datetime.date.today()),\ SQLField('timefield','time'),\ SQLField('datetimefield','datetime'),\ migrate='test_user.table') # Insert a field >>> db.users.insert(stringfield='a',booleanfield=True,\ passwordfield='p',textfield='x',blobfield='x',\ uploadfield=None, integerfield=5,doublefield=3.14,\ datefield=datetime.date(2001,1,1),\ timefield=datetime.time(12,30,15),\ datetimefield=datetime.datetime(2002,2,2,12,30,15)) 1 # Drop the table >>> db.users.drop() # Examples of insert, select, update, delete >>> tmp=db.define_table('person',\ SQLField('name'), \ SQLField('birth','date'),\ migrate='test_person.table') >>> person_id=db.person.insert(name="Marco",birth='2005-06-22') >>> person_id=db.person.insert(name="Massimo",birth='1971-12-21') >>> len(db().select(db.person.ALL)) 2 >>> me=db(db.person.id==person_id).select()[0] # test select >>> me.name 'Massimo' >>> db(db.person.name=='Massimo').update(name='massimo') >>> db(db.person.name=='Marco').delete() # test delete Update a single record >>> me.update_record(name="Max") >>> me.name 'Max' Examples of complex search conditions >>> len(db((db.person.name=='Max')&\ (db.person.birth<'2003-01-01')).select()) 1 >>> len(db((db.person.name=='Max')|\ (db.person.birth<'2003-01-01')).select()) 1 >>> me=db(db.person.id==person_id).select(db.person.name)[0] >>> me.name 'Max' # Examples of search conditions using extract from date/datetime/time >>> len(db(db.person.birth.month()==12).select()) 1 >>> len(db(db.person.birth.year()>1900).select()) 1 Example of usage of NULL >>> len(db(db.person.birth==None).select()) ### test NULL 0 >>> len(db(db.person.birth!=None).select()) ### test NULL 1 # Examples of search consitions using lower, upper, and like >>> len(db(db.person.name.upper()=='MAX').select()) 1 >>> len(db(db.person.name.like('%ax')).select()) 1 >>> len(db(db.person.name.upper().like('%AX')).select()) 1 >>> len(db(~db.person.name.upper().like('%AX')).select()) 0 # orderby, groupby and limitby >>> people=db().select(db.person.name,orderby=db.person.name) >>> order=db.person.name|~db.person.birth >>> people=db().select(db.person.name,orderby=order) >>> people=db().select(db.person.name,orderby=order,\ groupby=db.person.name) >>> people=db().select(db.person.name,orderby=order,limitby=(0,100)) # Example of one 2 many relation >>> tmp=db.define_table('dog', \ SQLField('name'), \ SQLField('birth','date'), \ SQLField('owner',db.person),\ migrate='test_dog.table') >>> db.dog.insert(name='Snoopy',birth=None,owner=person_id) 1 # A simple JOIN >>> len(db(db.dog.owner==db.person.id).select()) 1 # Drop tables >>> db.dog.drop() >>> db.person.drop() # Example of many 2 many relation and SQLSet >>> tmp=db.define_table('author',SQLField('name'),\ migrate='test_author.table') >>> tmp=db.define_table('paper',SQLField('title'),\ migrate='test_paper.table') >>> tmp=db.define_table('authorship',\ SQLField('author_id',db.author),\ SQLField('paper_id',db.paper),\ migrate='test_authorship.table') >>> aid=db.author.insert(name='Massimo') >>> pid=db.paper.insert(title='QCD') >>> tmp=db.authorship.insert(author_id=aid,paper_id=pid) # Define a SQLSet >>> authored_papers=db((db.author.id==db.authorship.author_id)&\ (db.paper.id==db.authorship.paper_id)) >>> rows=authored_papers.select(db.author.name,db.paper.title) >>> for row in rows: print row.author.name, row.paper.title Massimo QCD # Example of search condition using belongs >>> set=(1,2,3) >>> rows=db(db.paper.id.belongs(set)).select(db.paper.ALL) >>> print rows[0].title QCD # Example of search condition using nested select >>> nested_select=db()._select(db.authorship.paper_id) >>> rows=db(db.paper.id.belongs(nested_select))\ .select(db.paper.ALL) >>> print rows[0].title QCD # Output in csv >>> str(authored_papers.select(db.author.name,db.paper.title)) author.name,paper.title Massimo,QCD # Delete all leftover tables >>> db.authorship.drop() >>> db.author.drop() >>> db.paper.drop() # Commit or rollback your work >>> db.commit() # or db.rollback() 翻译 902天前 翻译
4#翻译 migrate can be False (do not create/alter tables), True (create/alter tables) or a filename (create/alter tables and store migration information in the file). Mind there are little idiosyncrasies like the fact that "user" is not a valid field name in PostgreSQL, or the fact that sqlite3 will ignore the type of a field and allow you to put anything in it despite the declared type. Every database backend has its own keywords that may conflict with your table names. 翻译 902天前 翻译