On Friday, August 9, 2019 at 1:47:52 PM UTC-7, Константин Комков wrote:
>
> *Val K*, yes, I have database which contain images. I tried use blob ↓.
> I don't know why but if I do like that I have error:
> table.py
> db.define_table(
> 'recipes',
> Field('NAME',length=512),
> Field('IMAGE','*blob*'),
> migrate=False
> )
> and query in controller:
> db().select(db.recipes.IMAGE).first()
> Версия
> web2py™ Version 2.18.5-stable+timestamp.2019.04.08.04.22.03
> Python Python 3.7.3: C:\Program Files (x86)\Python37-32\python.exe
> (prefix: C:\Program Files (x86)\Python37-32)Traceback
>
> 1.
> 2.
> 3.
> 4.
> 5.
> 6.
> 7.
> 8.
> 9.
> 10.
> 11.
> 12.
> 13.
> 14.
> 15.
> 16.
> 17.
> 18.
> 19.
> 20.
> 21.
> 22.
> 23.
> 24.
> 25.
> 26.
> 27.
> 28.
> 29.
> 30.
> 31.
> 32.
> 33.
> 34.
>
> Traceback (most recent call last):
> File "C:\web2py\gluon\restricted.py", line 219, in restricted
> exec(ccode, environment)
> File "C:\web2py\applications\test\controllers/default.py", line 61, in
> <module>
> File "C:\web2py\gluon\globals.py", line 421, in <lambda>
> self._caller = lambda f: f()
> File "C:\web2py\applications\test\controllers/default.py", line 9, in index
> db().select(db.recipes.IMAGE).first()
> File "C:\web2py\gluon\packages\dal\pydal\objects.py", line 2395, in select
> return adapter.select(self.query, fields, attributes)
> File "C:\web2py\gluon\packages\dal\pydal\adapters\base.py", line 763, in
> select
> return self._select_aux(sql, fields, attributes, colnames)
> File "C:\web2py\gluon\packages\dal\pydal\adapters\base.py", line 742, in
> _select_aux
> return processor(rows, fields, colnames, cacheable=cacheable)
> File "C:\web2py\gluon\packages\dal\pydal\adapters\base.py", line 306, in
> parse
> for row in rows
> File "C:\web2py\gluon\packages\dal\pydal\adapters\base.py", line 303, in
> <listcomp>
> self._parse(
> File "C:\web2py\gluon\packages\dal\pydal\adapters\base.py", line 232, in
> _parse
> value = self.parse_value(value, fit, ft, blob_decode)
> File "C:\web2py\gluon\packages\dal\pydal\adapters\base.py", line 199, in
> parse_value
> return self.parser.parse(value, field_itype, field_type)
> File "C:\web2py\gluon\packages\dal\pydal\parsers\__init__.py", line 100, in
> parse
> return self.registered[field_itype](value, field_type)
> File "C:\web2py\gluon\packages\dal\pydal\parsers\__init__.py", line 75, in
> __call__
> return self.call(value, field_type)
> File "C:\web2py\gluon\packages\dal\pydal\parsers\__init__.py", line 72, in
> _call
> return self.f(self.parser, value)
> File "C:\web2py\gluon\packages\dal\pydal\parsers\base.py", line 37, in _blob
> decoded = b64decode(to_bytes(value))
> File "C:\web2py\gluon\packages\dal\pydal\_compat.py", line 131, in to_bytes
> raise TypeError('Expected bytes')
> TypeError: Expected bytes
>
> Error snapshot [image: help]
> <http://127.0.0.1:8000/admin/default/ticket/test/127.0.0.1.2019-08-09.23-35-41.70898352-368b-4941-a3b8-c3eb55b113f9#>
>
> TypeError(Expected bytes)
>
> inspect attributes
> Frames
>
> -
>
> *File C:\web2py\gluon\restricted.py in restricted at line 219* код
> аргументы переменные
> -
>
> *File C:\web2py\applications\test\controllers\default.py in <module>
> at line 61* код аргументы переменные
> -
>
> *File C:\web2py\gluon\globals.py in <lambda> at line 421* код аргументы
> переменные
> -
>
> *File C:\web2py\applications\test\controllers\default.py in index at
> line 9* код аргументы переменные
> -
>
> *File C:\web2py\gluon\packages\dal\pydal\objects.py in select at line
> 2395* код аргументы переменные
> Code listing
>
> 2390.
> 2391.
> 2392.
> 2393.
> 2394.
> 2395.
> 2396.
> 2397.
> 2398.
> 2399.
>
> attributes.get('join', None),
> attributes.get('left', None),
> attributes.get('orderby', None),
> attributes.get('groupby', None))
> fields = adapter.expand_all(fields, tablenames)
> return adapter.select(self.query, fields, attributes)
>
> def iterselect(self, *fields, **attributes):
> adapter = self.db._adapter
> tablenames = adapter.tables(self.query,
>
> -
>
> *File C:\web2py\gluon\packages\dal\pydal\adapters\base.py in select at
> line 763* код аргументы переменные
> -
>
> *File C:\web2py\gluon\packages\dal\pydal\adapters\base.py in
> _select_aux at line 742* код аргументы переменные
> -
>
> *File C:\web2py\gluon\packages\dal\pydal\adapters\base.py in parse at
> line 306* код аргументы переменные
> -
>
> *File C:\web2py\gluon\packages\dal\pydal\adapters\base.py in
> <listcomp> at line 303* код аргументы переменные
> -
>
> *File C:\web2py\gluon\packages\dal\pydal\adapters\base.py in _parse at
> line 232* код аргументы переменные
> -
>
> *File C:\web2py\gluon\packages\dal\pydal\adapters\base.py in
> parse_value at line 199* код аргументы переменные
> -
>
> *File C:\web2py\gluon\packages\dal\pydal\parsers\__init__.py in parse
> at line 100* код аргументы переменные
> -
>
> *File C:\web2py\gluon\packages\dal\pydal\parsers\__init__.py in
> __call__ at line 75* код аргументы переменные
> -
>
> *File C:\web2py\gluon\packages\dal\pydal\parsers\__init__.py in _call
> at line 72* код аргументы переменные
> -
>
> *File C:\web2py\gluon\packages\dal\pydal\parsers\base.py in _blob at
> line 37* код аргументы переменные
> -
>
> *File C:\web2py\gluon\packages\dal\pydal\_compat.py in to_bytes at
> line 131* код аргументы переменные
> Function argument list
>
> (obj=<fdb.fbcore.BlobReader object>, charset='utf-8', errors='strict')
> Code listing
>
> 126.
> 127.
> 128.
> 129.
> 130.
> 131.
> 132.
> 133.
> 134.
> 135.
>
> return None
> if isinstance(obj, (bytes, bytearray, memoryview)):
> return bytes(obj)
> if isinstance(obj, str):
> return obj.encode(charset, errors)
> raise TypeError('Expected bytes')
>
> def to_native(obj, charset='utf8', errors='strict'):
> if obj is None or isinstance(obj, str):
> return obj
>
>
> Is it bug of DAL or it's normal?
>
That looks like a Python2 vs Python3 issue. And it's happening in the
_compat.py module, which I believe is for P3 support.
/dps
--
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
---
You received this message because you are subscribed to the Google Groups
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/web2py/d4c01087-4e64-459c-9ac1-015556927fa3%40googlegroups.com.