
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