Please enable JavaScript.
Coggle requires JavaScript to display documents.
Python3 (Basic python (Variables, numbers... (Show strA[2] to strA[4]: …
Python3
Basic python
Search, filter in a text => Regex = Regular Expression
import re
if(re.search("^The.*Spain", 'The rain is in Spain')):
array_result = re.findall("^The.*Spain", 'The rain is in Spain'))
Dictionaries
Python JSON
Javascript Object Notation
import json
Convert Dictionary to JSON text
json.dumps(person)
Convert JSON Text to Dictionary
person = json.loads('{"name": "Hoang", "age": 30}')
person is now a Dictionary
Mutable
person = {
"name": "Hoang",
"age": 30
}
person["name"] = "Daniel"
for key, value in person.items():
print(key, value)
Check a key is exists:
if "name" in person:
....
check a dictionary has value:
if(len(person) > 0)
Variables, numbers...
Show strA[2] to strA[4]:
print(strA[2:5])
strA = " Hello "
print(strA.strip()) #Hello
String's length
len("Hello")
Lowercase a string:
print(strA.lower())
print(strA.replace("H", "J"))
for x in range(2,6):
Will print 2 to 5
Casting:
x = float("12.35")
Complex:
z = 5 + 10j
Ternary:
a, b = 10, 20
min = a if a < b else b
Check string contains:
if "soccer" in str: ...
Multiline string:
x = "insert into.."+\
"values()..."
print('x = {}, y = {}'.format(1,3))
Lists, Tuples, Sets
List
fruits = ["apple","banana","orange"]
for fruit in fruits:
print(fruit)
Create a List from tuple
fruits = list(("apple", "banana", "cherry"))
List of Object(Dictionary)
cars = [
{'name': 'Ford', 'year': 2005},
{'name': 'Mitsubishi', 'year': 2000},
]
Sort by "name"
Sort "reverse":
cars.sort(reverse=True,key=lambda eachCar: eachCar['name'])
"void" sort:
cars.sort(key=lambda eachCar: eachCar['name'])
Delete an object
cars = [car for car in cars if car['name'] != 'Ford']
Map a list
array1 = [1,2,3,4,5]
array2 = map(lambda x: x * 2,array1)
Convert a string to list
1 more item...
Filter an list of objects
Using lambda expression:
Check "item is in the list"
if "apple" in fruits:
Insert item
fruits.append("cherry")
Remove 1 item:
del fruits[0]
...
fruits.pop()
Remove all items:
fruits.clear()
fruits.insert(1, "kiwi")
"""fruits[1] = "kiwi" """
Tuple
Unmutable
fruits = ("orange","kiwi", "mango")
fruits[0] = "banaba" => not run
Set
Set is "unordered", donot use pop()
fruits = {"orange","kiwi", "mango"}
Remove an item, may raise error:
fruits.remove("kiwi")
Remove an item, NOT raise error:
fruits.discard("kiwi")
Add new Item:
fruits.add("cherry")
Class & Object
Definition
class Person:
"""constructor"""
def __init__(self, name):
self.name = name
Static method:
class Database:
staticmethod
def get_instance():
instance method:
class Person:
def walk(self, km):
...
"Private" variable:
class Person:
__x = 10
Static variable:
class Person:
base_salary = 10
Inheritance
class HybridCar(ElectricCar,GasolineCar ):
Install packages
MacOS:
pip install package_name
pip3 install package_name
Custom packages
We have folder PackA
PackA/file1.py
PackA/file2.py
PackA/__init__.py
main.py
__init__.py:
from file1 import f1
from file2 import f2
main.py:
from PackA import *
Windows:
...python_path\python.exe -m pip install package_name
PostgresDB
Open SQLShell(or psql),
login with postgres account
CREATE DATABASE ...
List DBs : \l
Display tables:
\d
ALTER TABLE
"description" has NO values
ALTER TABLE Products
DROP COLUMN description;
ALTER TABLE Products
ADD COLUMN description VARCHAR(200);
Constraints
CREATE TABLE Products(
productId INTEGER NOT NULL PRIMARY KEY,
//productId SERIAL PRIMARY KEY, //auto increment
categoryId INTEGER REFERENCES Categories(categoryId ),
....);
ALTER TABLE
DROP CONSTRAINT PK_ProductId;
ALTER TABLE Products
ADD CONSTRAINT PK_ProductId
PRIMARY KEY(productId);
In 1-n relationship, delete (1), (n) is DELETED:
...ON DELETE CASCADE
In 1-n relationship, delete (1), (n) NOT delete if exist data
CREATE TABLE Products(...
categoryId INTEGER REREFENCES Categories(CategoryId) ON DELETE RESTRICT
CREATE TABLE Products(..
,UNIQUE(productName, price));
CREATE TABLE Products(...
,price NUMERIC NOT NULL CHECK(price > 0));
Paging with LIMIT & OFFSET:
SELECT * FROM Products LIMIT 5 OFFSET 1 x 5;
Table with JSON data:
CREATE TABLE jsonPersons(
id INTEGER,
personDetail JSON);
Insert JSON data:
INSERT INTO jsonPersons
VALUES(1, '{"name": "Hoang", "address": {"city": "Ha noi", "pinCode": "123"}}')
SELECT personDetail
FROM jsonPersons->'address'->>'city'
WHERE ...
Connect DB:
\c DBName
"Master" DB = postgres
Exit psql: \q
After installing, set superuser's password
Superuser's name = postgres
Select Locale
Open PgAdmin, RC, connect, enter password
Python DB API, connect Postgres Version 2
psycopg2
CRUD
(Create, Read, Update, Delete)
Prevent "SQL Injection"
sql = """INSERT INTO Products(productName, price, description)
VALUES(?, ?, ?);"""
cursor.execute(sql, ["iphone X", 732.3, "This is good"])
connection.commit()
What about UPDATE, DELETE ?
Query:
sql = "SELECT * FROM Products WHERE productName LIKE ?"
cursor.execute(sql, ['ipho'])
cursor.fetchall() #an array
tuple_products = cursor.fetchall()
A Class with Database methods:
Let's use Singleton Pattern:
One Class -> one Object
class DBManagement:
instance = None
staticmethod
def get_instance():
if DBManagement.
instance == None:
DBManagement.
instance = DBManagement()
return DBManagement.
instance
def
init
(self):
self.connection = ...
...
Connect DB:
connection_string = "dbname='..' user=...host..password...port='5432'"
connection = psycopg2.connect(connection_string)
cursor = connection.cursor()
PyQt5 - Python for GUI Application
QWidget is a "window":
self.window = QWidget()
Methods:
1.resize(w, h)
2.setWindowTitle('Abc App')
3.show()
4.setLayout(layoutX)
5.setEnable(true)
1 "window" has 1 "layout"
Layout vertically, horizontally:
QVBoxLayout, QHBoxLayout
Basic widgets
Alert using QMessageBox
1.setText(''Please enter...)
2.exec_()
Yes/No Question:
reply= QMessageBox.question(self, 'abc',
'Do you love me?',
QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
if reply == QMessageBox.Yes:
QLineEdit
1.setPlaceholderText('Enter name')
2.setText('abc')
3.text()
4.setEchoMode(QLineEdit.Password)
5.textChanged[str].connect(a_function)
Strip a text:
...txtEmail.text().strip()
def a_function(self, text):
QLabel
1.QLabel('Hello')
2.resize(w,h)
3.setPixmap(..)
4.setAlignment(..)
Qt.AlignCenter
Qt.AlignLeft
Qt.AlignRight
Show image => QPixmap
1.QPixmap('./logo.jpeg')
2.scaledToWidth(64)
QPushButton
1.QPushButton('Login')
2.setText('abc')
2.clicked.connect(functionA)
3.setFixedSize(QSize(50,50))
If functionA has params, eg: (x,y)
What's happened ?
from functools import partial
...
buttonA.clicked.connect(partial(functionA, x,y))
actionQuit = QtWidgets.QAction("Quit", widgetObject)
triggered.connect(functionA)
QTableWidget
1.setHorizontalHeaderLabels(["Name", "Year"])
2.horizontalHeader().setFixedHeight(40)
3.setRowCount(10)
4.setColumnCount()
5.setColumnWidth(0, 120.0)
6.setItem(rowId,0, QTableWidgetItem('iphone 7')
7.setCellWidget(row,column, a_widget)
QComboBox:
1.addItem('Java')
2.currentIndexChanged.connect(a_function)
3.currentText()
def a_function(self, index):
1.setSpacing(10)
2.setAlignment(..)
3.addLayout(vbox1)
4.addWidget(txtEmail)
5.addStretch(9) => add more space
QGridLayout
1.setSpacing(10)
2.addWidget(txtEmail, row, column)
Show "root" widget in App:
app = QApplication([])
login = LoginScreen()
app.exec_()
Style sheets
Inline QSS(Qt StyleSheet):
app.setStyleSheet('QPushButton: {margin: 10ex;}')
External QSS:
app.setStyleSheet(open("style.qss", "r").read())
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
RestFul API => Use Flask
Create somes classes, extends Resource
Each class in a separated .py file
Routes:
api.add_resource(ProductApi,'/products')
api.add_resource...
Test Routes using Postman(Chrome)
Assume param1 = 2
http://localhost
: 5000/products/2
class ProductApi(Resource):
def get(self, param1):
....
return jsonify(an_object)
def get...
def post...
def put...
def delete...
args = arguments sent by Client
from flask_restful import reqparse
....
def post(self):
parser = reqparse.RequestParser()
parser.add_argument('product_name')
parser.add_argument('year', type=int)
args = parser.parse_args()
"Global" objects:
app = Flask(__name__)
api = Api(app)
...
"""Start server in port - 5000"""
app.run(port='5000', debug=True)
from flask import *
from flask_restful import *
from flask.ext.jsonpify import jsonify
Django
Create Virtual Environment:
conda create --name myEnv django
"django" is "package's name"
Activate/deactivate environment:
activate myEnv
deactivate myEnv
Linux/MacOS => source activate myEnv
In Windows, let's use Powershell
conda create --name myEnv python=3.5
show all environments:
conda info --envs
Add more libs to existing Environment:
source activate myEnv
conda install django
or:
conda activate myEnv
create django project:
django-admin startproject my_project
File structure:
File __init__.py => this folder is a package
Main file: mainpage.py
manage.py, run many
urls.py => every pages of your project
wsgi.py = Web Server Gateway Interface => for deployment
Start web server:
cd my_project
python manage.py runserver
Now run on ...localhost:8000
Run in another port:
python manage.py runserver 127.0.0.1:8001
1 project has many apps. Start an app:
python manage.py startapp my_app
A folder named ./my_app is CREATED
This folders has models.py, tests.py,...
and migrations folder: to store database
Add app(= route) to project:
my_project/settings.py:
INSTALLED_APPS = [..'my_app']
Update libraries:
python manage.py makemigrations my_app
python manage.py migrate
2 more items...
Django Databases and Models
Open my_project/my_app/models.py
class Product(models.Model):
name = models.CharField(max_length=123, unique=True)
category = models.ForeighKey(Category)
url = models.URLField(unique=True)
date = models.DateField()
1 more item...
Name: Nguyen Duc Hoang
Youtube:
https://www.youtube.com/c/nguyenduchoang