Django

Všichni určitě máme rádi Python a kdo ne, ten Python nejspíš pořádně nikdy nevyzkoušel. Tento snadno naučitený jazyk, není nutně jen shell jazykem pro skriptovaní, ale může nalézt uplatnění i jinde, například pro vývoj jednoduchých a rychlých webů. Nebo často také pro tvorbu specializovaných webů v Django/Flask frameworku.

SqlAlchemy je rozšíření Flasku pro práci s Databázemi. Na stránkách Flask-SqlAlechemy je docela povedená dokumentace, jak SqlAlchemy používat, včetně příkladů a různých propojení mezi tabulkami. Příklad ukazuje jak pracovat s tabulkami včetně "Relationships".

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///my.db'
db = SQLAlchemy(app)

class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(80), nullable=False)
    body = db.Column(db.Text, nullable=False)
    pub_date = db.Column(db.DateTime, nullable=False,
        default=datetime.utcnow)

    category_id = db.Column(db.Integer, db.ForeignKey('category.id'),
        nullable=False)
    category = db.relationship('Category',
        backref=db.backref('posts', lazy=True))

    def __repr__(self):
        return '<Post %r>' % self.title

class Category(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50), nullable=False)

    def __repr__(self):
        return '<Category %r>' % self.name

if __name__ == "__main__":
    #app.run(host='0.0.0.0', port=8000, debug=True)
    app.run(host='::', port=8000, debug=True)

Vytvoříme Databázi a vložíme do ni nějaké články. Práce se SqlAlchemy vypada takto:

# Vycisteni DB
db.session.commit()
db.drop_all()

# Zalozeni nove DB
db.create_all()

# Pridani uzivatele
usr = User(username='Zden2k',email="zden2k.sobotka@gmail.com",password='jednodlouheheslo')
db.session.add(usr)
db.session.commit()

# Ukazani jestli uz neco v DB je:
usr.query.all()
usr.query.filter_by(id=1).all()
user = usr.query.filter_by(id=1).first()
user.id
user.email

# Hledani neznameho uzivatele
user = User.query.filter_by(username='Zden2k').first()
user.id
user.username

Můžeme se podívat přímo do DB a selectnout si aktuální data:

#root@django:/home/zsobotka#> sqlite3 my.db 
#SQLite version 3.27.2 2019-02-25 16:06:06
#Enter ".help" for usage hints.
#sqlite> .tables
#category  post    
#sqlite> select * from category
#   ...> ;
#1|Python
#sqlite> select * from post;
#1|Hello Python!|Python is pretty cool|2020-07-06 12:45:52.006885|1
#2|Snakes|Ssssssss|2020-07-06 12:45:52.007162|1
#sqlite> PRAGMA table_info(post);
#0|id|INTEGER|1||1
#1|title|VARCHAR(80)|1||0
#2|body|TEXT|1||0
#3|pub_date|DATETIME|1||0
#4|category_id|INTEGER|1||0