2

また助けが必要です。このエラーが発生する理由を誰か教えてもらえますか? Flask とポニー orm と python 3.4 を使用しています。私はいくつかのファイルを持っています。

users.py

from app import models
from pony.orm import *

class UsersAPI:
    @staticmethod
    @db_session
    def is_registered(e_mail):
        """
        This method for checking registered user or not
        :param e_mail:
        :return:
        """

        user = select(o for o in models.Users if o.email == e_mail)[:]
        print(user)

UsersAPI.is_registered("evgenusov96@yandex.ru")

ファイル models.py

from pony.orm import *
import config

db = Database()

class Users(db.Entity):
    id = PrimaryKey(int, auto=True)
    email = Required(str, 100)
    password = Required(str, 32)
    name = Required(str, 15)
    surname = Required(str, 20)
    city = Required(City, nullable=True)
    sex = Required(int)
    request = Required(str, 250, nullable=True)
    hobby = Required(str, 250, nullable=True)
    about = Required(str, 250, nullable=True)
    status_message = Required(str, 100, nullable=True)
    user1 = Set("Friends", reverse="user1")
    user2 = Set("Friends", reverse="user2")
    author = Set("Messages", reverse="author")
    addressee = Set("Messages", reverse="addressee")

私が得たこのエラー:

    C:\Python34\python.exe C:/Users/Евгений/PycharmProjects/langunet/run.py
Traceback (most recent call last):
  File "C:/Users/Евгений/PycharmProjects/langunet/run.py", line 2, in <module>
    from app import app
  File "C:\Users\Евгений\PycharmProjects\langunet\app\__init__.py", line 4, in <module>
    from app import routes
  File "C:\Users\Евгений\PycharmProjects\langunet\app\routes.py", line 2, in <module>
    from app.users import *
  File "C:\Users\Евгений\PycharmProjects\langunet\app\users.py", line 21, in <module>
    UsersAPI.is_registered("evgenusov96@yandex.ru")
  File "<string>", line 2, in is_registered
  File "C:\Python34\lib\site-packages\pony\orm\core.py", line 347, in new_func
    try: return func(*args, **kwargs)
  File "C:\Users\Евгений\PycharmProjects\langunet\app\users.py", line 18, in is_registered
    user = get(o for o in models.Users if o.email == e_mail)
  File "<string>", line 2, in get
  File "C:\Python34\lib\site-packages\pony\utils.py", line 88, in cut_traceback
    return func(*args, **kwargs)
  File "C:\Python34\lib\site-packages\pony\orm\core.py", line 4260, in get
    return make_query(args, frame_depth=3).get()
  File "<string>", line 2, in get
  File "C:\Python34\lib\site-packages\pony\utils.py", line 88, in cut_traceback
    return func(*args, **kwargs)
  File "C:\Python34\lib\site-packages\pony\orm\core.py", line 4531, in get
    objects = query[:2]
  File "<string>", line 2, in __getitem__
  File "C:\Python34\lib\site-packages\pony\utils.py", line 88, in cut_traceback
    return func(*args, **kwargs)
  File "C:\Python34\lib\site-packages\pony\orm\core.py", line 4721, in __getitem__
    return query._fetch(range=(start, stop))
  File "C:\Python34\lib\site-packages\pony\orm\core.py", line 4426, in _fetch
    used_attrs=translator.get_used_attrs())
  File "C:\Python34\lib\site-packages\pony\orm\core.py", line 3228, in _fetch_objects
    real_entity_subclass, pkval, avdict = entity._parse_row_(row, attr_offsets)
  File "C:\Python34\lib\site-packages\pony\orm\core.py", line 3258, in _parse_row_
    avdict[attr] = attr.parse_value(row, offsets)
  File "C:\Python34\lib\site-packages\pony\orm\core.py", line 1329, in parse_value
    val = attr.validate(row[offset], None, attr.entity, from_db=True)
  File "C:\Python34\lib\site-packages\pony\orm\core.py", line 1611, in validate
    if obj is None: throw(ValueError, 'Attribute %s is required' % attr)
  File "C:\Python34\lib\site-packages\pony\utils.py", line 126, in throw
    raise exc
ValueError: Attribute Users.request is required

これはどのように修正できますか?ありがとうございました!

4

1 に答える 1

2

User.requestこのエラーは、属性を として定義した場合に発生する可能性がRequiredありますが、表では、対応する列は実際にはオプションです (つまり、NULL 可能です)。オブジェクトのロード中に、Pony はオブジェクトの内部状態が一貫しているかどうかをチェックします。必須属性の値が欠落しているため、Pony は例外を生成します。

ここでは、次の 2 つの方法のいずれかで Pony の動作を改善する必要があると思います。

  • 属性が必要な場合でも、Pony はデータベースからこの属性の null 値をロードできるようにする必要があります。
  • もう 1 つの方法は、エラー メッセージをより明確にすることです。
于 2015-04-06T20:42:28.053 に答える