2020. augusztus 11., kedd

Django alapok

Django installálás és használatba vétel


Release naptár : (forrása https://www.djangoproject.com/download/)




Lépések:


rem install

conda install -c anaconda django 


rem ellenőrzése a verziónak (3.1)

python -m django --version 


rem kedő project létrehozása

django-admin startproject mysite


rem létrejött project könyvtárba belépés

cd mysite


rem django project elindítása

python manage.py runserver 


---

(base) C:\Users\User\mysite>python manage.py runserver

Watching for file changes with StatReloader

Performing system checks...


System check identified no issues (0 silenced).


You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.

Run 'python manage.py migrate' to apply them.

August 11, 2020 - 19:30:20

Django version 3.1, using settings 'mysite.settings'

Starting development server at http://127.0.0.1:8000/

Quit the server with CTRL-BREAK.

[11/Aug/2020 19:30:27] "GET / HTTP/1.1" 200 16351

[11/Aug/2020 19:30:27] "GET /static/admin/css/fonts.css HTTP/1.1" 200 423

[11/Aug/2020 19:30:27] "GET /static/admin/fonts/Roboto-Regular-webfont.woff HTTP/1.1" 200 85876

[11/Aug/2020 19:30:27] "GET /static/admin/fonts/Roboto-Bold-webfont.woff HTTP/1.1" 200 86184

[11/Aug/2020 19:30:27] "GET /static/admin/fonts/Roboto-Light-webfont.woff HTTP/1.1" 200 85692

Not Found: /favicon.ico

[11/Aug/2020 19:30:27] "GET /favicon.ico HTTP/1.1" 404 1972



Installálás:



(base) C:\Users\User>conda install Django
Collecting package metadata (current_repodata.json): done
Solving environment: done

## Package Plan ##

  environment location: C:\Users\User\Anaconda3

  added / updated specs:
    - django


The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    asgiref-3.2.10             |             py_0          19 KB  conda-forge
    conda-4.8.4                |   py37hc8dfbb8_2         3.1 MB  conda-forge
    django-3.1                 |             py_0         3.8 MB  conda-forge
    sqlparse-0.3.1             |             py_0          30 KB  conda-forge
    ------------------------------------------------------------
                                           Total:         6.9 MB

The following NEW packages will be INSTALLED:

  asgiref            conda-forge/noarch::asgiref-3.2.10-py_0
  django             conda-forge/noarch::django-3.1-py_0
  sqlparse           conda-forge/noarch::sqlparse-0.3.1-py_0

The following packages will be UPDATED:

  conda                                4.8.3-py37hc8dfbb8_1 --> 4.8.4-py37hc8dfbb8_2


Proceed ([y]/n)? y


Downloading and Extracting Packages
sqlparse-0.3.1       | 30 KB     | ############################################################################ | 100%
conda-4.8.4          | 3.1 MB    | ############################################################################ | 100%
asgiref-3.2.10       | 19 KB     | ############################################################################ | 100%
django-3.1           | 3.8 MB    | ############################################################################ | 100%
Preparing transaction: done
Verifying transaction: done
Executing transaction: done



A project elérési útvonal:


c:\Users\User\mysite\manage.py




WEB elérési cím:


vagy








Más porton indítás lehetősége (paraméterben meg kell adni a port számot)


python manage.py runserver 4345



settings.py file tartalma

Ez a file vezérli többek között az adatbázishoz kapcsolódást (c:\Users\User\mysite\mysite\settings.py)

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}


Különböző adatbázis kapcsolódási lehetőségek:


MySQL        django.db.backends.mysql 
Oracle         django.db.backends.oracle 
PostgreSQL django.db.backends.postgresql_psycopg2 
SQLite         django.db.backends.sqlite3



Szükség lehet az adatbázis kapcsolat installálásra is:


PostgreSQL   psycopg2             pip install psycopg2 
MySQL          mysql-python       pip install mysql-python 
Oracle            cx_Oracle           pip install cx_Oracle


url.py file tartalma

Ez a file szolgál a HTML konfiguráció beállításra (c:\Users\User\mysite\mysite\urls.py)


from django.contrib import admin
from django.urls import path

urlpatterns = [
    path('admin/', admin.site.urls),
]


Beállítási változtatások :

Új alkalmazás modull létrehozása CMD paranccsal:
python manage.py startapp polls



Létrejön az új könyvtár amelybe új filet hozunk létre

---polls/views.py   új file
from django.http import HttpResponse

def index(request):
    return HttpResponse("Üdvözöllek az új WEB lapon. (ez a polls könyvtár beállításai alapján jelenik meg)")


---polls/urls.py  új file
from django.urls import path

from . import views

urlpatterns = [
    path('', views.index, name='index'),
]

--- mysite/urls.py file tartalma:
from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('polls/', include('polls.urls')),
    path('admin/', admin.site.urls),
]


Új web lap elérése:







Admin belépés linkje:













Markdown jelőlés használat (Jupyter-nél)

 Markdown jelőlés használat (Jupyter-nél)


A Jupyter (python nyelvi környezet) egyik előnye a program mellet elhelyezett dokumentációs cellák használata.


A  Markdown cellában használatos jellölesek és jelentésük:



# Markdown cella fejléc 1.

## Markdown cella fejléc 2.

### Markdown cella fejléc 3.

**Ez itt félkövér**

*Ez meg dőlt*

| Ez  | meg itt |

| --- | ---  |

| egy | táblázat |


 Latex szerkezet:

$$

    \frac{1}{n}\sin x=    \frac{sinx}{n}=    \frac{sixn}{n}=    six\frac{n}{n}=six=6

$$


Képek beillesztése:

![interpreted](https://runestone.academy/runestone/books/published/thinkcspy/_images/interpret.png)

![compiled](https://runestone.academy/runestone/books/published/thinkcspy/_images/compile.png)


Szöveg kiemelés nyelvi értelmezéssel:

~~~python

 pandas.read_csv(filepath_or_buffer, sep=', ', delimiter=None, header='infer', names=None, index_col=None, usecols=None, squeeze=False, prefix=None, mangle_dupe_cols=True, dtype=None, engine=None, converters=None, true_values=None, false_values=None, skipinitialspace=False, skiprows=None, nrows=None, na_values=None, keep_default_na=True, na_filter=True, verbose=False, skip_blank_lines=True, parse_dates=False, infer_datetime_format=False, keep_date_col=False, date_parser=None, dayfirst=False, iterator=False, chunksize=None, compression='infer', thousands=None, decimal=b'.', lineterminator=None, quotechar='"', quoting=0, escapechar=None, comment=None, encoding=None, dialect=None, tupleize_cols=False, error_bad_lines=True, warn_bad_lines=True, skipfooter=0, skip_footer=0, doublequote=True, delim_whitespace=False, as_recarray=False, compact_ints=False, use_unsigned=False, low_memory=True, buffer_lines=None, memory_map=False, float_precision=None)

 ~~~

2020. július 26., vasárnap

Python térkép kezelés OSM modullal



Használathoz szükséges csomagok:

import networkx as nx
import osmnx as ox
import requests
import matplotlib.cm as cm
import matplotlib.colors as colors
import matplotlib.pyplot as plt
from descartes import PolygonPatch
from shapely.geometry import Polygon, MultiPolygon
%matplotlib inline
ox.config(use_cache=True, log_console=True)
## ox.__version__
















Települések úthálózat kialakulása:
https://atlo.team/utak-epuletek-halozatok/


Értelmezése :

https://osmnx.readthedocs.io/en/stable/osmnx.html#module-osmnx.stats


Minták:
https://hub.gke.mybinder.org/user/klajosw-python-kjuuo8ij/tree

2020. július 15., szerda

Python és a gráf kezelés

Netwokx csomag használata




Networkx osztályú típusú önhurkok megengedettek. Párhuzamos élek megengedettek
Graph nem irányytott Igen Nem
DiGraph irányított Igen Nem
MultiGraph nem irányítot Igen Igen
MultiDiGraph irányított Igen Igen


## Minta 1:
import matplotlib.pyplot as plt
import networkx as nx

G = nx.Graph()
G = nx.path_graph(4)
print(list(G.nodes))
print(list(G.edges))
#$plt.subplot(126)
nx.draw(G)

print('-------1-------')
G = nx.DiGraph()
G = nx.path_graph(4)
G =G.subgraph([0, 1, 2])
print(list(G.nodes))
print(list(G.edges))
#plt.subplot(121)
nx.draw(G)
#G.clear()

print('-------2-------')
G = nx.MultiGraph()
G = nx.path_graph(4)
print(list(G.nodes))
print(list(G.edges))
#plt.subplot(122)
nx.draw(G)
G.clear()

print('-------3-------')
G = nx.MultiDiGraph()
G = nx.path_graph(4)
print(list(G.nodes))
print(list(G.edges))
#plt.subplot(123)
nx.draw(G)
G.clear()

g = nx.Graph()
g.add_edge('a','b',weight=0.1)
g.add_edge('b','c',weight=1.5)
g.add_edge('a','c',weight=1.0)
g.add_edge('c','d',weight=2.2)
print('----------11--------')
print (nx.shortest_path(g,'b','d'))  ##  [’b’, ’c’, ’d’]
print('---------12---------')
print (nx.shortest_path(g,'b','d', weight='weight')) ## sulytényező figyelembe vétele
nx.draw(g)

G1 = nx.DiGraph()
G1.add_edges_from([("A","B"), ("B","C"), ("C","A"), ("C","D")])
nx.draw(G1, with_labels=True)

info='''
# small famous graphs
petersen=nx.petersen_graph()
tutte=nx.tutte_graph()
maze=nx.sedgewick_maze_graph()
tet=nx.tetrahedral_graph()

# classic graphs
K_5=nx.complete_graph(5)
K_3_5=nx.complete_bipartite_graph(3,5)
barbell=nx.barbell_graph(10,10)
lollipop=nx.lollipop_graph(10,20)

# random graphs
er=nx.erdos_renyi_graph(100,0.15)
ws=nx.watts_strogatz_graph(30,3,0.1)
ba=nx.barabasi_albert_graph(100,5)
red=nx.random_lobster(100,0.9,0.9)

----
import pylab as plt #import Matplotlib plotting interface

g = nx.erdos_renyi_graph(100,0.15)
nx.draw(g)
nx.draw_random(g)
nx.draw_circular(g)
nx.draw_spectral(g)
plt.savefig(‘graph.png’)

---
from IPython.display import SVG
A = nx.nx_agraph.to_agraph(G)
A.draw("out.svg", prog="circo")
SVG("out.svg")

----
G1 = nx.cycle_graph(6)
>>> G2 = nx.wheel_graph(7)
>>> nx.graph_edit_distance(G1, G2)
7.0



### Minta 2

import networkx as nx
G = nx.Graph()        # Ez az osztály nem irányított gráfot valósít meg. Nem veszi figyelembe a két csomópont közötti több élt. Megengedi az önhurokat élek egy csomópont és önmaga között.
G = nx.DiGraph()         # Irányított grafikonok, azaz grafikonok irányított élekkel. Közös műveleteket biztosít a irányított gráfokhoz, (a a grafikon alosztálya).
G = nx.MultiGraph()     # Rugalmas grafikonosztály, amely több irányítatalan élt tesz lehetővé a csomópontok között. A kiegészítő
a rugalmasság a teljesítmény bizonyos mértékű romlásához vezet, bár általában nem jelentős.
G = nx.MultiDiGraph()  # A MultiGraph irányított változata.




### Minta 3

import matplotlib.pyplot as plt
import networkx as nx

G = nx.Graph()

## csomopontok betöltése
G.add_node(1)  ## csomopont hozzáadása / létrehozása
G.add_node(7)  ## csomopont hozzáadása / létrehozása

G.add_nodes_from([12, 13, 14, 15]) ## csomopontok létrehozása tömbből
G.add_nodes_from(range(100, 110))  ## csompopontok léttrehozása tartományből

H = nx.path_graph(10) ## 10 csomopont otvonal létrehozás (egy vonal)
print('---------0---------')  
for n in H:        ## csomopontok listája
    print(n)

G.add_nodes_from(H)  ##  csomopontok átadása/feltöltése
G.add_node(H)

## élek betöltése
[n for n in G if n < 3] # iterate through nodes
for n in G : ## iterate through nodes
   if n < 3 :
      print('N értéke:',n)
     
for n, nbrsdict in G.adjacency():
    for nbr, eattr in nbrsdict.items():
        if 'weight' in eattr:
            pass

for u, v, weight in G.edges.data('weight'):
    if weight is not None:
        pass
  
G.add_edge(1, 2)             # él létrehozása default edge data=1
G.add_edge(2, 3, weight=0.9) # specify edge data


for n in G:        ## csomopontok listája
    print(n)
   
print('---------1---------')   
for nbr in G[2]:    ## Szomszéd csomopontok listája
    print(nbr)

print('---------2---------')   
print(G.adj)      ## csomopontok listája atributomokkal

G.add_edges_from([(21, 22), (21, 23)])  ## élek betöltése tulip-ből
G.add_edges_from(H.edges)               ## élek objektumok betöltése

#G = nx.cubical_graph()
plt.subplot(121)
nx.draw(G) # default spring_layout


G.add_edge(4, 5, color='blue', weight=0.84, size=300)
print(G[4][5]['size'])         ## -> 300
print(G.edges[4, 5]['color'])  ## -> red

print('Hossz : ', len(G))

plt.subplot(122)
nx.draw(G, pos=nx.circular_layout(G), node_color='b', edge_color='g')  ## formázott megjelenítés


##-- törlés, módosítás
helpem='''
Graph.remove_edge(u, v)                 ## Remove the edge between u and v.
Graph.remove_edges_from(ebunch) ## Remove all edges specified in ebunch.
Graph.update([edges, nodes])           ## Update the graph using nodes/edges/graphs as input.
Graph.clear()                                     ## Remove all nodes and edges from the graph.
Graph.clear_edges()                         ## Remove all edges from the graph.
-----



import networkx as nx
G = nx.Graph()  # Ez az osztály nem irányított gráfot valósít meg. Nem veszi figyelembe a két csomópont közötti több élt. Megengedi az önhurokat élek egy csomópont és önmaga között.
G = nx.DiGraph() # Irányított grafikonok, azaz grafikonok irányított élekkel. Közös műveleteket biztosít a irányított gráfokhoz, (a
a grafikon alosztálya).
G = nx.MultiGraph()  # Rugalmas grafikonosztály, amely több irányítatalan élt tesz lehetővé a csomópontok között. A kiegészítő
a rugalmasság a teljesítmény bizonyos mértékű romlásához vezet, bár általában nem jelentős.
G = nx.MultiDiGraph()  # A MultiGraph irányított változata.


##-------------------------------------

import networkx as nx

## csomopontok generálása

#K = nx.complete_bipartite_graph(3,3)

#K = nx.complete_graph(6)

K = nx.path_graph(6)

 

## másolása

#K33 = K.copy()

 

#pozició beállítása

positions = {0:[-1,1], 1:[0,1], 2:[1,3], 3:[-1,-1], 4:[0,-1], 5:[1,-1]}

 

 

K33.to_undirected()   ## Returns an undirected copy of the graph.

#K33.to_directed()    ## Returns a directed representation of the graph.

#K33.subgraph(nodes)  ##Returns a SubGraph view of the subgraph induced

 

#ax = plt.figure().gca()

#ax.set_axis_off()

options = {'node_size' : 500, 'node_color' : 'r'}

nx.draw_networkx(K33, positions, with_labels=True, **options)

plt.show()

 

 

 

G=nx.DiGraph()

G.add_node(1,pos=(1,1))

G.add_node(2,pos=(2,2))

G.add_edge(1,2)

options = {'node_size' : 300, 'node_color' : 'b'}

pos=nx.get_node_attributes(G,'pos')

 

nodes = nx.draw_networkx_nodes(G, pos, node_size=300, node_color='green', with_labels=True)

edges = nx.draw_networkx_edges(G, pos, node_size=300, arrowstyle='-|>', ## -> -|>

                               arrowsize=100, edge_color='blue',

                               width=2)

nyilhegy = '''

Curve   -           None

CurveB ->         head_length=0.4, head_width=0.2

BracketB          -[          widthB=1.0, lengthB=0.2, angleB=None

CurveFilledB     -|>        head_length=0.4, head_width=0.2

CurveA <-         head_length=0.4, head_width=0.2

CurveAB           <->       head_length=0.4, head_width=0.2

CurveFilledA     <|-        head_length=0.4, head_width=0.2

CurveFilledAB   <|-|>      head_length=0.4, head_width=0.2

BracketA          ]-          widthA=1.0, lengthA=0.2, angleA=None

BracketAB        ]-[         widthA=1.0, lengthA=0.2, angleA=None, widthB=1.0, lengthB=0.2, angleB=None

Fancy   fancy    head_length=0.4, head_width=0.4, tail_width=0.4

Simple  simple  head_length=0.5, head_width=0.5, tail_width=0.2

Wedge wedge  tail_width=0.3, shrink_factor=0.5

BarAB  |-|         widthA=1.0, angleA=None, widthB=1.0, angleB=None

'''

 

# nx.draw(G,pos, with_labels=True)

nx.draw(G,pos, with_labels=True, **options)

 

plt.show()





Egy kis összefoglaló: 



Minták:







2020. július 14., kedd

SqlDeveloper adatmodellezés

Az Orcale SqlDeveloper nagyon jól használható adatmodellezésre.














Automatizállás és gyorsítás céljára még scriptelhető is:
Indítása : Tools-> Data Modeler -> Design Rules And.. -> Transformations




 Nashorn engine (értelmező használata)

c:\apps\sqldeveloper192\jdk\jre\lib\ext\nashorn.jar

  Jruby  engine (értelmező használata)

c:\apps\sqldeveloper192\jdk\jre\lib\ext\jruby.jar


  Jpython engine (értelmező használata)

c:\apps\sqldeveloper192\jdk\jre\lib\ext\jython-standalone-2.7.1.jar



/// Minta kezdet

var t_name = "table_template";

var p_name = "ctemplateID";


template = model.getTableSet().getByName(t_name);

if(template!=null){

    tcolumns = template.getElements();

    tables = model.getTableSet().toArray();   // táblák tömbbe helyezése

    for (var t = 0; t<tables.length;t++){           // tábla tömb bejárása

          table = tables[t];

          // compare name ignoring the case

         if(!table.getName().equalsIgnoreCase(t_name)){

           for (var i = 0; i < tcolumns.length; i++) {

              column = tcolumns[i];

              col = table.getColumnByProperty(p_name,column.getObjectID());

              if(col!=null){

                    attr = col.getEngAttribute();

                         if(attr!=null){

                              ent = attr.getEntity();

                              attr.remove();

                              if(ent!=null){

                                   ent.setDirty(true);

                              }

                         }

                // col.remove();

               table.setDirty(true);

               }

        }

      }

  }

}

// Minta vége

Egy kis azonnal elérhető segítség

c:\apps\sqldeveloper192\sqldeveloper\extensions\oracle.datamodeler\xmlmetadata\doc\SQLDeveloperDataModelerScripting.docx

 


Hasznos minták:

https://github.com/ABestteti/SQLDataModeler



Készítettem egy bemutató fizikai adatmodell mintát a lehetőségek bemutatására:

 

 

Van benne minta jelleggel  :

   Tábla leíró

   Mező leíró

   Modell diagram

   Sub modell diagram

   Tárgykatalógus link

   Egymásba átfúró/meghívó linkek

 

Használata bal oldali menü terület + gomb le nyitásával megjelennek a sémák és az alatta levő tábla objektumok :


A tábla objektumon klikkelve a jobb oldalon  megjelenik az adattartalma. A tábla adatok között Used In Diagrams szekcióban a diagramra mutató link névre klikkeléssel :


Eljuthatunk a diagramhoz. Az egyes tábla nevek linkként működve visszavisznek a tábla adatlaphoz:

 

cid:image003.png@01D65B7E.9BF01DE0

 

Természetesen a modell digram a bal oldali menű terüretről is meg hívható (fő diagramm vagy az rész diagramok is):

 
Tábla objektum kiválasztáshoz a szűrés segítségül hívható:

Minta modell riport link:
https://klajosw.github.io/sqldeveloper/


Innen letölthető:






Telepítés után a létrejött könyvtárban demok is találhatóak:


c:\apps\sqldeveloper192\sqldeveloper\extensions\oracle.datamodeler\samples\Dimensional_model\Global11_demo.pdf

c:\apps\sqldeveloper192\sqldeveloper\extensions\oracle.datamodeler\reports\Reporting Schema diagrams\Related to Design.pdf


Hasznos linkek:








Hasznos gyorsgonbok:

1.   ctrl-enter : executes the current statement(s)

2.   F5 : executes the current code as a script (think SQL*Plus)

3.   ctrl-space : invokes code insight on demand

4.   ctrl-Up/Dn : replaces worksheet with previous/next SQL from SQL History

5.   ctrl-shift+Up/Dn : same as above but appends instead of replaces

6.   shift+F4 : opens a Describe window for current object at cursor

7.   ctrl+F7 : format SQL

8.   ctrl+/ : toggles line commenting

9.   ctrl+e: incremental search

Ctrl+Space, code insight provides a context-sensitive popup window that can help you select




 Nashorn nyelv használata


A Nashorn javascript engine melyen egyszerübb programozni JAVA környezetben.
Használatához a jjs.exe konzol alkalmazásra van szükség amely mindíg megtalálható a $JAVA_HOME/bin
könyvtárban.

konzol ablak elindítása (WIN környezetben)
c:\Program Files (x86)\Java\jre1.8.0_251\bin\jjs.exe 



Az elinduló ablakban prompt:

jjs>


A 'Hello Word' kiíratása:

jjs> print('Hello World');




Java prgramokba is beágyazható módon ugyan ez kiíratás így néz ki:

ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");

engine.eval("print('Hello World!');");

 















Felirat hozzáadása






1=n kapcsolatnál: A nyíl a főegyedtől az alegyed felé mutat.

A logikai adatmodell szokásos ábrázolási módja szerint a „sok” oldalra „csirkelábat” vagy nyílhegyet rajzolunk



Django alapok

Django installálás és használatba vétel Release naptár : (forrása  https://www.djangoproject.com/download/ ) Lépések: rem install conda inst...