0

我正在控制器中编写查询代码:

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'])

提前感谢您的回复

4

1 回答 1

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。不知道这是不是你的情况

于 2014-09-19T01:04:53.157 回答