Запрос существующей базы данных с peewee - MySQL metastore - PullRequest
0 голосов
/ 11 июня 2018

Я новичок в peewee и пытаюсь запросить базу данных MySQL metastore db, используемую моей установкой Hive.Мне удалось перечислить все доступные таблицы, но я не могу запросить конкретную таблицу «TBLS».Это стандартная таблица метастазов, которая просто хранит информацию обо всех таблицах в метастазах.

Это мой код до даты:

from peewee import *
metastore_db = MySQLDatabase("metastore", host="localhost", port=3306, user="root", passwd="")
metastore_db.connect()

tables = metastore_db.get_tables()
for tbl in tables:
     print tbl

Теперь, чтобы запросить таблицу, которую я написал:

class BaseModel(Model):
    class Meta:
            database = metastore_db

class TBLS(BaseModel):
    DB_ID = IntegerField()
    OWNER = CharField()
    TBL_NAME = CharField()

    class Meta:
            db_table = 'TBLS'

tbl = TBLS.select()
for t in tbl:
    print t

Теперь я получаю эту ошибку -

peewee.OperationalError: (1054, "Неизвестный столбец 't1.id' в 'списке полей'")

Чего мне не хватает, или это потому, что имя таблицы в верхнем регистре?Нужно ли упоминать ВСЕ столбцы в модели?

Это структура таблицы TBLS -

mysql> desc TBLS;
+--------------------+--------------+------+-----+---------+-------+
| Field              | Type         | Null | Key | Default | Extra |
+--------------------+--------------+------+-----+---------+-------+
| TBL_ID             | bigint(20)   | NO   | PRI | NULL    |       |
| CREATE_TIME        | int(11)      | NO   |     | NULL    |       |
| DB_ID              | bigint(20)   | YES  | MUL | NULL    |       |
| LAST_ACCESS_TIME   | int(11)      | NO   |     | NULL    |       |
| OWNER              | varchar(767) | YES  |     | NULL    |       |
| RETENTION          | int(11)      | NO   |     | NULL    |       |
| SD_ID              | bigint(20)   | YES  | MUL | NULL    |       |
| TBL_NAME           | varchar(128) | YES  | MUL | NULL    |       |
| TBL_TYPE           | varchar(128) | YES  |     | NULL    |       |
| VIEW_EXPANDED_TEXT | mediumtext   | YES  |     | NULL    |       |
| VIEW_ORIGINAL_TEXT | mediumtext   | YES  |     | NULL    |       |
+--------------------+--------------+------+-----+---------+-------+

Спасибо!

====================================================
EDIT: and UPDATE
====================================================

Я былЯ могу удалить ошибку, добавив еще немного мета-информации, например, -

class tbls(BaseModel):
                tbl_id             = PrimaryKeyField(db_column='TBL_ID')
                create_time        = IntegerField(db_column='CREATE_TIME')
                db_id              = IntegerField(db_column='DB_ID')
                last_access_time   = IntegerField(db_column='LAST_ACCESS_TIME')
                owner              = CharField(max_length=767,db_column='OWNER')
                retention          = IntegerField(db_column='RETENTION')
                sd_id              = IntegerField(db_column='SD_ID')
                tbl_name           = CharField(max_length=128,db_column='TBL_NAME')
                tbl_type           = CharField(max_length=128,db_column='TBL_TYPE')
                class Meta:
                        db_table = 'TBLS'


tbl = tbls.select()

for t in tbl:
    print t.owner,t.tbl_name

Теперь я могу получить необходимые строки.У меня вопрос: как я могу получить все столбцы таблицы без необходимости явно называть каждый (например, select *), если это возможно.

...