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