Вопрос по orm, python, object, sqlalchemy, unit-testing – python sqlAlchemy: получил InvalidRequestError после изменения местоположения класса

6

Если я поставлюCapacityMin класс и унитест классin same .py file, все в порядке. Но после того, как я переедуCapacityMin класс в отдельный файл и запустите unit-test & # xFF0C; Я получил эту ошибку:

SQL expression, column, or mapped entity expected

DETAILS:

InvalidRequestError: SQL expression, column, or mapped entity expected - got '<module 'Entities.CapacityMin' from 'D:\trunk\AppService\Common\Entities\CapacityMin.pyc'>'

но это не хорошо

CapacityMin.py :

import sqlalchemy
from sqlalchemy import *
from  sqlalchemy.ext.declarative  import  declarative_base

Base  =  declarative_base()

class  CapacityMin(Base):
    '''

    table definition:
        ID        INT NOT NULL auto_increment,
        Server    VARCHAR (20) NULL,
        FeedID    VARCHAR (10) NULL,
        `DateTime` DATETIME NULL,
        PeakRate  INT NULL,
        BytesRecv INT NULL,
        MsgNoSent INT NULL,
        PRIMARY KEY (ID)
    '''

    __tablename__  =  'capacitymin'

    ID  =  Column(Integer,  primary_key=True)
    Server  =  Column(String)
    FeedID  =  Column(String)
    DateTime  =  Column(sqlalchemy.DateTime)
    PeakRate = Column(Integer)
    BytesRecv = Column(Integer)
    MsgNoSent = Column(Integer)

    def __init__(self, server, feedId, dataTime, peakRate, byteRecv, msgNoSent):
        self.Server = server
        self.FeedID = feedId
        self.DateTime = dataTime
        self.PeakRate = peakRate
        self.BytesRecv = byteRecv
        self.MsgNoSent = msgNoSent

    def __repr__(self):
        return "<CapacityMin('%s','%s','%s','%s','%s','%s')>" % (self.Server, self.FeedID ,
                self.DateTime ,self.PeakRate,
                self.BytesRecv, self.MsgNoSent)



if __name__ == '__main__':
    pass

Ваш Ответ

1   ответ
10

Вы используете модуль, а не класс внутри модуля.

Я подозреваю, что вы используете это так:

from Entities import CapacityMin

в то время как вы хотели использовать:

from Entities.CapacityMin import CapacityMin

Такая путаница является одной из причин того, чтоРуководство по стилю Python (PEP 8) рекомендует использовать строчные имена для ваших модулей; тогда ваш импорт будет:

from entities.capacitymin import CapacityMin

и вашу ошибку было бы легче обнаружить.

& # X54C8; & # x54C8; Спасибо. & # X975E; & # x5E38; & # x611F; & # x8C22; & # xFF01; Scott 混合理论
Добро пожаловать :-) & # x4E0D; & # x7528; & # x5BA2; & # x6C14;
Я имел в виду имена файлов и имена каталогов. Каталоги формируют пакеты, файлы составляют модули. Так что переименуйEntities вentities, а такжеCapacityMin.py вcapacitymin.py.
спасибо, проблема решена, и о & quot; рекомендует использовать строчные имена для ваших модулей; & quot; Вы имели в виду изменить имя файла (dir) на строчные? если нет, не могли бы вы сказать мне, как изменить название moudles? Scott 混合理论

Похожие вопросы