使用peewee查询现有数据库 - MySQL Metastore

时间:2018-06-11 00:42:16

标签: python mysql peewee

我是peewee的新手,我正在尝试查询我的Hive安装使用的MySQL Metastore数据库。我能够列出所有可用的表,但无法查询特定的表'TBLS'。这是一个标准的Metastore表,它只存储Metastore中所有表的信息。

这是我的代码,直到日期:

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
====================================================

我能够通过添加更多类似的Meta信息来删除错误 -

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 *)。

0 个答案:

没有答案