Example #1
0
def get_table_columns(conn,obj):
    """
        Obtiene las columnas de una tabla
    """
    cur = conn.cursor()
    cur.execute("""
        SELECT a.attname,
          pg_catalog.format_type(a.atttypid, a.atttypmod),
          (SELECT substring(pg_catalog.pg_get_expr(d.adbin, d.adrelid) for 128) 
           FROM pg_catalog.pg_attrdef d
           WHERE d.adrelid = a.attrelid AND d.adnum = a.attnum AND a.atthasdef) as format_extra,
          a.attnotnull, a.attnum
        FROM pg_catalog.pg_attribute a
        WHERE a.attrelid = %s AND a.attnum > 0 AND NOT a.attisdropped
        ORDER BY a.attnum
        """, [obj.oid])
    for name, format_type, format_extra, notnull, number in cur:
        field = Struct()
        field.name = name
        field.format_type = format_type
        field.format_extra = format_extra
        field.default = None # <- probablemente esta en format_extra...
        field.notnull = notnull
        field.nullable = not field.notnull
        field.sql_nullable = "NOT NULL" if notnull else ""
        field.number = number
        yield field
Example #2
0
def getTableObj(tree,root):
    table = Struct()
    table.xmltree = tree
    table.xmlroot = root
    table.name = table.xmlroot.xpath("name/text()")[0]
    table.fields = []
    table.pk = []
    table.fields_idx = {}
    for xmlfield in table.xmlroot.xpath("field"):
        field = Struct()
        field.name = xmlfield.xpath("name/text()")[0]
        build_field_type(field, xmlfield)
        field.pk = text2bool(one(xmlfield.xpath("pk/text()"),"false"))
        field.default = one(xmlfield.xpath("default/text()"),None)
        if field.pk: table.pk.append(field.name)
        if field.name in table.fields_idx: raise ValueError("La tabla %s tiene el campo %s repetido" % (table.name,field.name))
        field.number = len(table.fields)
        table.fields_idx[field.name] = field.number
        table.fields.append(field)
    return table