Tworzenie tabel w Gython

Słowo kluczowe table używane jest do tworzenia oraz opcjonalnie do dodawania wierszy danych do tabeli. Tabele mogą być tworzone na kilka sposobów:

Tworzenie tabeli przez ręczną specyfikację danych

Składnia:

table table_name:
    format_declaration
    creating_index
    column_name, column_name ...
    column_value, column_value ...
    column_value, column_value ...
    ...
        

format_declaration opisany jest w format section.

Wartości łańcucha znaków nie muszą być umieszczone wewnątrz apostrofów (ale umieszczenie ich może być konieczne w niektórych przypadkach, np. gdy pierwsza wartość łańcucha znaków zawiera tylko cyfry). Jedynymi wyjątkami są deklaracje DATE, TIME oraz TIMESTAMP:

DATE      format_string [ language_code [country_code] ]
TIME      format_string [ language_code [country_code] ]
TIMESTAMP format_string [ language_code [country_code] ]
        

format_string w formacie Java LST jest formatem godziny

Lista możliwych wartości dla language_code opisana jest przez specyfikację ISO 639 (zobacz Załącznik)

Lista możliwych wartości dla country_code opisana jest przez specyfikację ISO 3166 (zobacz Załącznik)

Następująca składnia używana jest do tworzenia indeksu:

[unique] index on col1[(n)] [,col2[(n2)]...]["index_name"]
        

Każda linia opisuje jeden (pojedynczy lub wielo-kolumnowy) indeks. W kolejności tworzenia liczby indeksów wielo-kolumnowych, instrukcje powyżej powinny być powtarzane wymaganą ilość razy. Jeżeli index_name jest ominięty, nazwa będzie automatycznie wygenerowana w formie: "idx_LINENUMBER"

Liczba column_value wpisu w jednym wierszu musi być taka sama jak liczba wpisucolumn_name.

Przykład 4.11. Format declaration:

table '_table_':
    format a VARCHAR(5)
    format b INTEGER
    format c DATE      'yyyy MM dd'
    format d TIMESTAMP 'yyyy MMMM dd - HH:mm:ss' "en" "en"
    format e TIMESTAMP 'yyyy MMM dd - HH:mm:ss' "pl" "pl"

    a  b   c   d   e

    str    2     '2000 11 4' '2000 JULY 4 - 12:12:12'  None
    2  None    None    None    '2000 STY 02 - 3:45:5'
    'str'  -3  '2001 05 13'    None    '1999 LUT 10 - 16:12:00'
 
sql a:
    select * from _table_
    
for c in a.header:                  # see the chapter Data Access and Data Processing: Using SQL statement 
    print c
    

Output:

{'columnTypeName': 'VARCHAR', 'precision': None, 'displaySize': 2147483647, 'columnName': 'a', 'columnType': 12, 'isNullable': None, 'scale': None}
{'columnTypeName': 'INTEGER', 'precision': None, 'displaySize': 2147483647, 'columnName': 'b', 'columnType': 4, 'isNullable': 0, 'scale': 0}
{'columnTypeName': 'DATE', 'precision': None, 'displaySize': 2147483647, 'columnName': 'c', 'columnType': 91, 'isNullable': None, 'scale': None}
{'columnTypeName': 'TIMESTAMP', 'precision': None, 'displaySize': 2147483647, 'columnName': 'd', 'columnType': 93, 'isNullable': None, 'scale': None}
{'columnTypeName': 'TIMESTAMP', 'precision': None, 'displaySize': 2147483647, 'columnName': 'e', 'columnType': 93, 'isNullable': None, 'scale': None}
    

Aby szybko sprawdzić zawartość stworzonej tabeli poniższa komenda może być użyteczna:

Przykład 4.12. Quick output from the table:

trans None <- '_table_':
    print a,b,c,d,e

Output

str 2 2000-11-04 2000-07-04 12:12:12 None
2 None None None 2000-01-02 03:45:05
str -3 2001-05-13 None 1999-02-10 16:12:00

Przykład 4.13. Table procedure (Indexes)

table 'TAB1':  
    format a DATE 'yyyy-MM-dd'
    format b INTEGER
    format c VARCHAR(10)
    index on c "c_index"
    a   b   c
    '1999-11-01'   2  "abc"

trans None <- 'TAB1':
   print a

Output

1999-11-01

Tworzenie tabeli z danymi skopiowanymi z listy

Składnia:

table table_name <- sequence:
    format_declaration
    creating_index
    column_name , column_name ...
    ...
        

Przykład 4.14. Sequences as source of data

ll = [[0, 1, 2], [3, 4, 5]]
table 'TAB1' <- ll:
    a   b   c

lt = [(0, 1, 2),(3, 4, 5)]
table 'TAB2' <- lt:
    a   b   c
    
tt = ((0, 1, 2),(3, 4, 5))
table 'TAB3' <- tt:
    a   b   c

tl = ([0, 1, 2],[3, 4, 5])
table 'TAB4' <- tl:
    a   b   c
 
tm = ([0, 1, 2],(3, 4, 5))
table 'TAB5' <- tm:
    a   b   c

trans None <- 'TAB5':
	print a, b, c

Output

0 1 2
3 4 5

Tworzenie tabeli przez wzięcie wartości z wyniku zapytania SQL

Składnia:

table table_name <- sql_result:
     format_declaration
     creating_index
     column_name, column_name ...
     ...
        

Przykład 4.15. SQL-query result as source of data

lista = [['2005-04-12', 12, 'aaa'], ['2007-08-16', None, 'bbb'], [None, 10, None]]
table 'TAB1' <- lista:  
    format a DATE 'yyyy-MM-dd'
    format b INTEGER
    format c VARCHAR(10)
    a   b   c
    
sql res:
    select * from TAB1
print "SQL-query result:"
print res
 
table 'TAB2' <- res:
    a b c

trans None <- 'TAB2':
	print a, b, c

Output

SQL-query result:
a          | b    | c    | 
+----------+------+------+--
2005-04-12 |   12 | aaa  | 
2007-08-16 | None | bbb  | 
      None |   10 | None | 

2005-04-12 12 aaa
2007-08-16 None bbb
None 10 None

Użycie list do zdefiniowania nazw kolumn oraz formatu

Niezależnie od użytej metody do tworzenia tabeli, możliwe jest zdefiniowanie nazw kolumn lub formatu na zewnątrz części ‘tabeli’ (jako listę). Aby użyć takiego definiowania konieczne jest zastosowanie prefiksu dla nazwy listy/list wewnątrz procedury tabeli z użyciem znaku ‘$’:

Przykład 4.16. Defining column names and column formats as a list.

tm = ([0, 1, 2],(3, 4, 5))
col_formats = ["a DOUBLE", "b INTEGER", "c VARCHAR"]
col_names = ['a', 'b', 'c']
table 'TAB1' <- tm:
    format $col_formats
    $col_names
    
    
trans None <- 'TAB1':
    print a, b, c
        
print tableColumns('TAB1')   

Output

0.0 1 2
3.0 4 5
['a', 'b', 'c']

Importowanie danych z zewnętrznych źródeł

Metody te tworzenia tabel zalecane są tylko dla małej ilości danych. W innych przypadkach dane mogą importowane być przy użyciu:

  • Komenda csvImport dla danych trzymanych w plikach CSV,

  • Opcja GUI based CSV import,

  • Komenda xlsImport dla danych przetrzymywanych w MS Excel,

  • Komenda GDBase IMPORT TABLE dla danych przetrzymywanych w innych bazach danych,

  • funkcja do inportu jakiejkolwiek innej używanej bazy danych.