Сбой модуля Python

#python #module #cassandra

#python #модуль #cassandra

Вопрос:

Я изучаю средство сопоставления объектов Cassandra с использованием Python, и у меня есть следующая небольшая программа, которая заполняет таблицу базы данных. Это работает просто отлично…

 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 вызове. Я уверен, что мне удалось переместить объявление класса в модуль, но не могу найти, что я сделал неправильно. Я не уверен, почему мой объект из модуля не является моделью.

Ответ №1:

Когда вы это сделаете, import Courses имя Courses будет относиться к вызываемому модулю Courses , а не к классу Courses , который случайно находится внутри этого модуля.

Используемая вами функция требует, чтобы ее аргумент был производным от определенного класса, и модуль Courses , очевидно, не удовлетворяет этому условию.

Вероятно, вы имели в виду импортировать класс, вызываемый Courses следующим образом:

 from Courses import Courses
  

Комментарии:

1. Стон! Да, это все! Я был почти уверен, что это было что-то простое.