首页 > 解决方案 > Python模块失败

问题描述

我正在使用 Python 学习 Cassandra 对象映射器,并且我有以下填充数据库表的小程序。这工作得很好......

from cassandra.cqlengine.connection import setup
from cassandra.cqlengine.management import sync_table
from cassandra.cqlengine.models import Model
from cassandra.cqlengine import columns
from uuid import uuid4

##import Courses

class Courses(Model):
    id = columns.UUID(primary_key = True)
    title  = columns.Text()
    duration = columns.Integer()

setup(['chelly', ], 'objectlake', protocol_version = 3)

# Create some courses to inflict on our hapless trainees

courses = [
    { 'title' : "Conflict of Interest" , 'duration' : 120 },
    { 'title' : "Resolving Conflict" ,   'duration' : 60 },
    { 'title' : "Time Cards" ,           'duration' : 30 },
    { 'title' : "PTO" ,                  'duration' : 30 },
    { 'title' : "Managing Upwards" ,     'duration' : 120 }
]

sync_table(Courses)

for course in courses:
    Courses.create(id = uuid4(), title = course['title'], duration = course['duration'])

print('Done-ish?')

但是,如果我注释 Courses 类的定义并取消注释导入,则在 Courses.py 中使用:

from cassandra.cqlengine.models import Model
from cassandra.cqlengine import columns

class Courses(Model):
    id = columns.UUID(primary_key = True)
    title  = columns.Text()
    duration = columns.Integer()

ValueError: Models must be derived from base Model.我在sync_table通话中遇到异常。我确定我已经将类的声明移动到模块中,但找不到我做错了什么。我不确定为什么我的模块中的对象不是模型。

标签: pythonmodulecassandra

解决方案


当您这样做import Courses时,名称Courses将引用名为的模块Courses,而不是Courses恰好位于该模块内的类。

你使用的函数要求它的参数是从某个类派生的,而模块 Courses显然不满足这个条件。

您可能打算导入这样的Courses

from Courses import Courses

推荐阅读