Я новичок в 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 *), если это возможно.