我正在控制器中编写查询代码:
books=db(db.book.lib_name=="My-Library-Name").select(db.book.title, db.book.ISBN, orderby=db.book.title)
但我一直收到这个错误:
<type 'exceptions.ValueError'> invalid literal for long() with base 10: "My-Library-Name"
这是我的DAL数据库(我使用postgresql作为我的数据库驱动程序):
db = DAL('postgres://myUsername:myPassword@localhost/libman',pool_size=0)
db.define_table('library',
Field('lib_name', ondelete='CASCADE', unique=True),
Field('address', length=20),
primarykey=['lib_name'])
db.define_table('book',
Field('ISBN', unique=True, ondelete='CASCADE'),
Field('lib_name', 'reference library'),
Field('pic', 'upload'),
Field('title', length=100),
Field('publisher_lname', length=50),
Field('publisher_fname', length=50),
Field('no_of_copies', 'integer'),
Field('available_copies', 'integer'),
Field('description', length=255),
primarykey=['ISBN'])
先谢谢你的回复
答案 0 :(得分:0)
lib-name是外键,因此它不是有效查询。查询可以基于db.book.ISBN而不是。
另一方面,我建议将您的模型更改为:
db.define_table('library',
Field('lib_name', ondelete='CASCADE', unique=True),
Field('address', length=20),
migrate=True,
)
db.define_table('book',
Field('ISBN', unique=True, ondelete='CASCADE'),
Field('lib_name', 'reference library'),
Field('pic', 'upload'),
Field('title', length=100),
Field('publisher_lname', length=50),
Field('publisher_fname', length=50),
Field('no_of_copies', 'integer'),
Field('available_copies', 'integer'),
Field('description', length=255),
migrate=True,
)
由于primarykey旨在连接到legacy DB。不知道这是不是你的情况