Описание структуры в sqlalchemy - PullRequest
0 голосов
/ 28 января 2019

Есть такая задача.есть определенная структура данных (ниже я прикрепляю sql, как он был создан).Есть задача описать класс для работы с этой таблицей.Раньше я не имел дела с sqlalchemy, поэтому возникла проблема.При запуске выдается ошибка именно в этой структуре.

sql запрос, где создается таблица с пользовательскими типами:

CREATE TYPE yt_video_stat AS (
viewCount text,
likeCount text,
dislikeCount text,
commentCount text
);

CREATE TYPE yt_channel_info AS (
title text,
description text,
customUrl text,
published text,
imgUrl text,
country text,
channelStatistics yt_ch_info_stat,
lastTenVideosStat FLOAT
);

CREATE TYPE yt_video_info AS (
title text,
description text,
imgUrl text,
tags text[],
defaultAudioLanguage text,
videoId text,
videoStatistics yt_video_stat,
er FLOAT
);

CREATE TYPE one_cell AS (
channelInfo yt_channel_info,
videosStat yt_video_info[]
);

CREATE TYPE cell AS (
collectionTime INTEGER,
cells one_cell[]
);

CREATE TABLE ytstat (
id INTEGER,
DATA cell[]
);

(В sql я тоже не силен)

Вот моя попытка описать класс:

from sqlalchemy import Column, Integer, String, Float

из sqlalchemy.ext.declarative. Импорт Declarative_base из sqlalchemy.dialects.postgresql. Импорт ARRAY из sqlalchemy_utils. Импорт CompositeType

База = декларативная_b()

class YtData (Base):

__tablename__ = 'ytstat'
id = Column(Integer, primary_key=True)
data = Column(ARRAY(
    CompositeType(
        'a', [
            Column('id', Integer),
            Column('data', CompositeType(
                'data', [
                    Column('collectionTime', Integer),
                    Column('cells', ARRAY(CompositeType(
                        'cell', [
                            Column('channelInfo', CompositeType(
                                'chif', [
                                    Column('title', String),
                                    Column('description', String),
                                    Column('imgUrl', String),
                                    Column('country', String),
                                    Column('channelStatistics', CompositeType(
                                        'chstat', [
                                            Column('followers', String),
                                            Column('views', String),
                                            Column('videoCount', String)
                                        ]
                                    )),
                                    Column('er', Float)
                                ]
                            )),
                            Column(ARRAY(
                                CompositeType(
                                    'stat', [
                                        Column('title', String),
                                        Column('description', String),
                                        Column('imgUrl', String),
                                        Column('tags', ARRAY(String)),
                                        Column('defaultAudioLanguage', String),
                                        Column('videoId', String),
                                        Column('videoStatistics', CompositeType(
                                            'vstat', [
                                                Column('viewCount', String),
                                                Column('likeCount', String),
                                                Column('dislikeCount', String),
                                                Column('commentCount', String)
                                            ]
                                        )),
                                        Column('er', Float)
                                    ]
                                )
                            ))
                        ]
                    )))
                ]
            ))
        ]
    )
))

Вот сама ошибка:

 Traceback (most recent call last):
 File "C:/Users/*/Desktop/*/run.py", line 4, in <module>
  from models.yt_data import YtData
 File "C:\Users\*\Desktop\*\models\yt_data.py", line 9, in <module>
  class YtData(Base):
 File "C:\Users\*\Desktop\*\models\yt_data.py", line 55, in YtData
  Column('er', Float)
 File "C:\Users\*\AppData\Local\Programs\Python\Python36-32\lib\site- 
  packages\sqlalchemy_utils\types\pg_composite.py", line 192, in __init__
   self.name, [c.name for c in columns]
 File "C:\Users\*\AppData\Local\Programs\Python\Python36- 
  32\lib\collections\__init__.py", line 404, in namedtuple
   'keyword: %r' % name)
 ValueError: Type names and field names cannot be a keyword: 'None'

Скажите, пожалуйста, с чем это связано.И если я сделаю что-то не так, укажите мне, пожалуйста.Заранее спасибо за советы и ответы)

...