SlideShare uma empresa Scribd logo
1 de 54
Baixar para ler offline
The effective use of
Django ORM
Yaroslav Muravskyi
@myarik
What we’re going to talk about
- Django ORM Mistakes
- Performance Problems in the Django ORM
- Database concurrency in Django the right way
What is Django ORM?
ORM - Object-relational mapping
Django's ORM is just a pythonical way to create
SQL to query and manipulate your database and get
results in a pythonic fashion.
The first step to fixing a problem
is being able to identify it
Tools
Tools
• django.db.connection (Make sure your Django
DEBUG setting is set to True)
Tools
• django.db.connection (Make sure your Django
DEBUG setting is set to True)
>>>	from	django.db import	connection
>>>	Author.objects.all()
<QuerySet [<Author:	Michael	Armstrong>,	...,	<Author:	GEORGE	PACKER>]>
>>>	connection.queries
[{'sql':	'SELECT	"books_author"."id",	"books_author"."first_name",	
"books_author"."last_name",	"books_author"."email"	FROM	"books_author"	LIMIT	21',
'time':	'0.007'}]
Tools
• django.db.connection (Make sure your Django
DEBUG setting is set to True)
>>>	from	django.db import	connection
>>>	Author.objects.all()
<QuerySet [<Author:	Michael	Armstrong>,	...,	<Author:	GEORGE	PACKER>]>
>>>	connection.queries
[{'sql':	'SELECT	"books_author"."id",	"books_author"."first_name",	
"books_author"."last_name",	"books_author"."email"	FROM	"books_author"	LIMIT	21',
'time':	'0.007'}]
• sql -- The raw SQL statement
• time -- How long the statement took to execute, in seconds.
Tools
• shell_plus command with option --print-sql
from django-extensions project
Tools
• shell_plus command with option --print-sql
from django-extensions project
>>>	Author.objects.all()
SELECT	"books_author"."id",	"books_author"."first_name",	
"book_author"."last_name","books_author"."email"	FROM	"books_author"	LIMIT	
21
Execution	time:	0.001993s	[Database:	default]
Tools
• Django Debug Toolbar
Django ORM Mistakes
Mistake #1
>>>	queryset =	Author.objects.all()
>>>	[author	for	author	in	queryset if	author.email.endswith('@gmail.com')]
Mistake #1
Use filter() and exclude() method to do
filtering in the database.
>>>	Author.objects.filter(email__icontains='@gmail.com')
>>>	queryset =	Author.objects.all()
>>>	[author	for	author	in	queryset if	author.email.endswith('@gmail.com')]
Mistake #2
authors	=	Author.objects.filter(email__icontains='@gmail.com')
if	authors:
do_stuff()
if	len(authors)	>	0:
do_stuff()
Mistake #2
If you want to know only if a record exists,
then use exists() method
Author.objects.filter(email__icontains='@gmail.com').exists()
authors	=	Author.objects.filter(email__icontains='@gmail.com')
if	authors:
do_stuff()
if	len(authors)	>	0:
do_stuff()
Mistake #3
authors	=	Author.objects.filter(email__icontains='@gmail.com')
if	len(authors)	>	5:
do_stuff()
Mistake #3
authors	=	Author.objects.filter(email__icontains='@gmail.com')
if	len(authors)	>	5:
do_stuff()
If you need only the size use count()
count	=	Author.objects.filter(email__icontains='@gmail.com').count()
if	count	>	5:
do_stuff()
Mistake #4
book	=	Book.objects.get(id=5)
if	book.author:
do_stuff()
Mistake #4
book	=	Book.objects.get(id=5)
if	book.author:
do_stuff()
Use foreign key values directly
#	If	you	don't	need	the	author	object
if	book.author_id:
do_stuff()
Additional request to the database
Mistake #5
Don’t fetch data you don’t need
#	Retrieve	values	as	a	dictionary
Book.objects.all().values('name',	'price')
<	QuerySet[{'name':	'Rat	Of	The	Stockades',	'price':	Decimal('4.28')},	...]	>
#	Retrieve	values	as	a	tuple
Book.objects.all().values_list('name',	'price')
<	QuerySet[('Rat	Of	The	Stockades',	Decimal('4.28')),	...]	>
#	Use	QuerySet.defer()	and	only()
Book.objects.only('name',	'price').all()
Book.objects.defer('price').all()
Mistake #6
for	book	in	Book.objects.all():
do_stuff(book)
Mistake #6
for	book	in	Book.objects.all():
do_stuff(book)
When you have a lot of objects, the caching
behavior of the QuerySet can cause a large
amount of memory to be used.
#	One	book	object	in	the	memory
for	book	in	Book.objects.iterator():
do_stuff(book)
Mistake #7
def create():
with	transaction.atomic():
item	=	Author.objects.create(first_name='Simon',	last_name='Anderson',	
email='fake@mail.com')
set_email(item.id)
item.books_count=	3
item.save()
def set_email(id):
item	=	Author.objects.get(id=id)
item.email =	'simon@gmail.com'
item.save()
Mistake #7
def create():
with	transaction.atomic():
item	=	Author.objects.create(first_name='Simon',	last_name='Anderson',	
email='fake@mail.com')
set_email(item.id)
#	The	database	row	has	been	updated	with	email='simon@gmail.com',	but	this	
instance	still	has	email='fake@mail.com'	as	it	hasn't	been	reloaded
item.books_count=	3
item.save()
def set_email(id):
item	=	Author.objects.get(id=id)
item.email =	'simon@gmail.com'
item.save()
Mistake #7
def create():
with	transaction.atomic():
item	=	Author.objects.create(first_name='Simon',	last_name='Anderson',	
email='fake@mail.com')
set_email(item)
item.books_count=	3
item.save()
def set_email(item):
item.email =	'simon@gmail.com'
item.save()
Performance Problems in
the Django ORM
Avoid unnecessary queries when
accessing foreign keys
Use the select_related method to load
the foreign key values and cache those results
for each object
#	N	+	1	query
for	book	in	Book.objects.iterator():
print(book.name,	book.author.get_full_name())
#	1	query
for	book	in	Book.objects.select_related('author').iterator():
print(book.name,	book.author.get_full_name())
prefetch_related
#	Queries	2,	Execution	time:	0.002458s
def authors():
queryset =	Author.objects.prefetch_related('books')
authors	=	[]
for	author	in	queryset:
books	=	[book.name for	book	in	author.books.all()]
authors.append({
'name':	author.get_full_name(),
'books':	books
})
return	authors
Use the prefetch_related for joining many-to-
many and many-to-one objects
Be careful with prefetch_related
#	Queries	18,	Execution	time:	0.032458s
def top_authors():
queryset =	Author.objects.prefetch_related('books')
authors	=	[]
for	author	in	queryset:
books	=	[book.name for	book	in	author.books.filter(average_rating__gt=3)]
authors.append({
'name':	author.get_full_name(),
'books':	books
})
return	authors
Using Prefetch with to_attr
from	django.db.modelsimport	Prefetch
#	Queries	2,	Execution	time:	0.008458s
def top_authors():
queryset =	Author.objects.prefetch_related(
Prefetch('books',
queryset=Book.objects.filter(average_rating__gt=3),
to_attr='top_books')
)
authors	=	[]
for	author	in	queryset:
books	=	[book.name for	book	in	author.top_books]
authors.append({'name':	author.get_full_name(),	'books':	books})
return	authors
Subqueries and Annotations
Subqueries and annotations can speed
up to 50 times your application.
Task:
Display the list of authors name and
the count of books for each author.
Subqueries and Annotations
Instead of concatenating name in Python
class	Author(models.Model):
...
def get_full_name(self):
return	'%s	%s'	%	(self.first_name,	self.last_name)
We can concatenate name in a database
from	django.db.modelsimport	Value
from	django.db.models.functionsimport	Concat
Author.objects.annotate(
name=Concat('first_name',	Value('	'),	'last_name')
).values('name',	)
Subqueries and Annotations
from	django.db.modelsimport	OuterRef,	Subquery,	Value,	IntegerField
from	django.db.models.functionsimport	Concat
def get_authors():
book_query=	Book.objects.filter(
author_id=OuterRef('id')
).values('author_id').order_by().annotate(
books=Count('*')).values('books')
return	Author.objects.annotate(
name=Concat('first_name',	Value('	'),	'last_name'),
count_books=Subquery(book_query,	output_field=IntegerField())
).values('name',	'count_books')
Case
A	Case()	expression	is	like	the	if …	elif …	else statement	in	Python
from	django.db.modelsimport	CharField,	Case,	Value,	When
#	Get	the	discount	for	each	Book	based	on	the	rating	value
def get_authors():
Book.objects.annotate(
discount=Case(
When(average_rating__gte=4,	then=Value('10%')),
When(average_rating__gte=2,	then=Value('5%')),
default=Value('0%'),
output_field=CharField(),
)
)
Aggregation with Filter
from	django.db.modelsimport	Count,	Case,	Value,	When,	Sum,	IntegerField
Book.objects.aggregate(
total_books=Count('id'),
total_platinum_discount=Sum(Case(
When(average_rating__gte=4,	then=Value(1)),
default=Value(0),
output_field=IntegerField(),
))
)
Conditional expressions
Aggregation with Filter
from	django.db.modelsimport	Count,	Q
Book.objects.aggregate(
total_books=Count('id'),
total_platinum_discount=Count('id',	filter=Q(average_rating__gte=4))
)
In Django 2.0 a filter argument to aggregate
functions was added to make this a lot easier
Database concurrency in
Django the right way
Specifying which fields to save
def set_name(id,	value):
instance	=	Book.objects.get(id=id)
instance.name =	value
instance.save()
def set_rating(id,	value):
instance	=	Book.objects.get(id=id)
instance.average_rating =	value
instance.save()
What happens if the set_name and set_rating
will run simultaneously?
Specifying which fields to save
Specifying which fields to save
def set_name(id,	value):
instance	=	Book.objects.get(id=id)
instance.name =	value
instance.save(update_fields=['name'])
def set_rating(id,	value):
instance	=	Book.objects.get(id=id)
instance.average_rating =	value
instance.save(update_fields=['average_rating'])
One possible solution is to identify the
updated fields
Use an F() expression to simple
arithmetic tasks
book	=	Book.objects.get(pk=804)
book.count+=	1
book.save()
Use an F() expression to simple
arithmetic tasks
book	=	Book.objects.get(pk=804)
book.count=	F('count')	+	1
book.save()
Use an F() expression to simple
arithmetic tasks
book	=	Book.objects.get(pk=804)
book.count=	F('count')	+	1
book.save()
But take care with this kind of assignment.
Avoiding race conditions using F()
book	=	Book.objects.get(pk=804)		#	count	=	10
book.count=	F('count')	+	1
book.save()		#	count	=	11
book.name =	'Avoiding	race	conditions'
book.save()		#	count	=	12
The code
def create_payment(collection_id):
with	transaction.atomic():
book_collection =	BookCollection.objects.select_releted('user').get(id=collection_id)
amount	=	book_collection.book_set.all().aggregate(total=Sum('price'))['total']
if	book_collection.user.balance>=	amount:
user.reduce_balance(amount)
Payment.objects.create(amount=amount,	book_collection=book_collection)
else:
raise	Exception('Insufficient	funds')
What happens if there are two
simultaneous requests?
Select for update
SELECT FOR UPDATE returns a queryset that
will lock rows until the end of the
transaction
Select for update
def create_payment(collection_id):
#	Wrap	in	a	database	transaction
with	transaction.atomic():
book_collection =	BookCollection.objects.get(id=collection_id)
amount	=	book_collection.book_set.all().aggregate(total=Sum('price'))['total']
#	Wait	for	a	lock
user	=	User.objects.select_for_update().get(id=book_collection.user_id)
if	user.balance >=	amount:
user.reduce_balance(amount)
Payment.objects.create(amount=amount,	book_collection=book_collection)
else:
raise	Exception('Insufficient	funds')
Select for update
with	transaction.atomic():
User.objects.select_for_update().filter(id__in=[804,	806])
...
Select for update – Querysets are
lazy!
In this case, the select_for_update will never
be run. Wrap the select_for_update in a bool if
you don't evaluate them straight away.
bool(User.objects.select_for_update().filter(id__in=[804,	806]))
Select for update – Preventing
deadlocks
#	Worker	1
with	transaction.atomic():
ids	=	[804,	805]
bool(User.objects.select_for_update().filter(id__in=ids))
...
#	Worker	2
with	transaction.atomic():
ids	=	[805,	804]
bool(User.objects.select_for_update().filter(id__in=ids))
...
Waiting for each other
Select for update – Preventing
deadlocks
When using select_for_updates on multiple
records, make sure you acquire the locks in a
consistent order.
#	Worker	1
with	transaction.atomic():
ids	=	[804,	805]
bool(User.objects.select_for_update().filter(id__in=ids).order_by('id'))
...
- Make your code clear and then work on optimizing
it
- Learn how to use the Django ORM properly to get
the most out of it
- Database concurrency is something you need to
think about
- ORMs can obscure bugs. Look at the SQL
Summary
Thanks!
@myarik
y@myarik.com

Mais conteúdo relacionado

Mais procurados

Celery의 빛과 그림자
Celery의 빛과 그림자Celery의 빛과 그림자
Celery의 빛과 그림자Minyoung Jeong
 
Advanced JavaScript
Advanced JavaScriptAdvanced JavaScript
Advanced JavaScriptNascenia IT
 
Core java complete ppt(note)
Core java  complete  ppt(note)Core java  complete  ppt(note)
Core java complete ppt(note)arvind pandey
 
Angular 2.0 forms
Angular 2.0 formsAngular 2.0 forms
Angular 2.0 formsEyal Vardi
 
Intro to Jinja2 Templates - San Francisco Flask Meetup
Intro to Jinja2 Templates - San Francisco Flask MeetupIntro to Jinja2 Templates - San Francisco Flask Meetup
Intro to Jinja2 Templates - San Francisco Flask MeetupAlan Hamlett
 
Angular tutorial
Angular tutorialAngular tutorial
Angular tutorialRohit Gupta
 
Intro to Asynchronous Javascript
Intro to Asynchronous JavascriptIntro to Asynchronous Javascript
Intro to Asynchronous JavascriptGarrett Welson
 
Introduction To Django
Introduction To DjangoIntroduction To Django
Introduction To DjangoJay Graves
 
MongoDB Aggregation Framework
MongoDB Aggregation FrameworkMongoDB Aggregation Framework
MongoDB Aggregation FrameworkCaserta
 
Introduction to web programming with JavaScript
Introduction to web programming with JavaScriptIntroduction to web programming with JavaScript
Introduction to web programming with JavaScriptT11 Sessions
 
Django Framework and Application Structure
Django Framework and Application StructureDjango Framework and Application Structure
Django Framework and Application StructureSEONGTAEK OH
 

Mais procurados (20)

Angularjs PPT
Angularjs PPTAngularjs PPT
Angularjs PPT
 
Celery의 빛과 그림자
Celery의 빛과 그림자Celery의 빛과 그림자
Celery의 빛과 그림자
 
Advanced JavaScript
Advanced JavaScriptAdvanced JavaScript
Advanced JavaScript
 
Angular Data Binding
Angular Data BindingAngular Data Binding
Angular Data Binding
 
JavaScript Promises
JavaScript PromisesJavaScript Promises
JavaScript Promises
 
Jquery
JqueryJquery
Jquery
 
Core java complete ppt(note)
Core java  complete  ppt(note)Core java  complete  ppt(note)
Core java complete ppt(note)
 
Angular 2.0 forms
Angular 2.0 formsAngular 2.0 forms
Angular 2.0 forms
 
Intro to Jinja2 Templates - San Francisco Flask Meetup
Intro to Jinja2 Templates - San Francisco Flask MeetupIntro to Jinja2 Templates - San Francisco Flask Meetup
Intro to Jinja2 Templates - San Francisco Flask Meetup
 
Angular tutorial
Angular tutorialAngular tutorial
Angular tutorial
 
Intro to Asynchronous Javascript
Intro to Asynchronous JavascriptIntro to Asynchronous Javascript
Intro to Asynchronous Javascript
 
Introduction To Django
Introduction To DjangoIntroduction To Django
Introduction To Django
 
Javascript
JavascriptJavascript
Javascript
 
MongoDB Aggregation Framework
MongoDB Aggregation FrameworkMongoDB Aggregation Framework
MongoDB Aggregation Framework
 
JQuery UI
JQuery UIJQuery UI
JQuery UI
 
Django Girls Tutorial
Django Girls TutorialDjango Girls Tutorial
Django Girls Tutorial
 
3. Java Script
3. Java Script3. Java Script
3. Java Script
 
AngularJS
AngularJS AngularJS
AngularJS
 
Introduction to web programming with JavaScript
Introduction to web programming with JavaScriptIntroduction to web programming with JavaScript
Introduction to web programming with JavaScript
 
Django Framework and Application Structure
Django Framework and Application StructureDjango Framework and Application Structure
Django Framework and Application Structure
 

Semelhante a The effective use of Django ORM

PyCon APAC - Django Test Driven Development
PyCon APAC - Django Test Driven DevelopmentPyCon APAC - Django Test Driven Development
PyCon APAC - Django Test Driven DevelopmentTudor Munteanu
 
Building Apps with MongoDB
Building Apps with MongoDBBuilding Apps with MongoDB
Building Apps with MongoDBNate Abele
 
Database madness with_mongoengine_and_sql_alchemy
Database madness with_mongoengine_and_sql_alchemyDatabase madness with_mongoengine_and_sql_alchemy
Database madness with_mongoengine_and_sql_alchemyJaime Buelta
 
Javascript Objects Deep Dive
Javascript Objects Deep DiveJavascript Objects Deep Dive
Javascript Objects Deep DiveManish Jangir
 
Write better python code with these 10 tricks | by yong cui, ph.d. | aug, 202...
Write better python code with these 10 tricks | by yong cui, ph.d. | aug, 202...Write better python code with these 10 tricks | by yong cui, ph.d. | aug, 202...
Write better python code with these 10 tricks | by yong cui, ph.d. | aug, 202...amit kuraria
 
Practical Ruby Projects With Mongo Db
Practical Ruby Projects With Mongo DbPractical Ruby Projects With Mongo Db
Practical Ruby Projects With Mongo DbAlex Sharp
 
Rails and alternative ORMs
Rails and alternative ORMsRails and alternative ORMs
Rails and alternative ORMsJonathan Dahl
 
MongoDB, PHP and the cloud - php cloud summit 2011
MongoDB, PHP and the cloud - php cloud summit 2011MongoDB, PHP and the cloud - php cloud summit 2011
MongoDB, PHP and the cloud - php cloud summit 2011Steven Francia
 
Practical Ruby Projects with MongoDB - Ruby Kaigi 2010
Practical Ruby Projects with MongoDB - Ruby Kaigi 2010Practical Ruby Projects with MongoDB - Ruby Kaigi 2010
Practical Ruby Projects with MongoDB - Ruby Kaigi 2010Alex Sharp
 
The Django Book chapter 5 Models
The Django Book chapter 5 ModelsThe Django Book chapter 5 Models
The Django Book chapter 5 ModelsVincent Chien
 
The Best (and Worst) of Django
The Best (and Worst) of DjangoThe Best (and Worst) of Django
The Best (and Worst) of DjangoJacob Kaplan-Moss
 
JSON(JavaScript Object Notation)
JSON(JavaScript Object Notation)JSON(JavaScript Object Notation)
JSON(JavaScript Object Notation)Raghu nath
 
Mongo Presentation by Metatagg Solutions
Mongo Presentation by Metatagg SolutionsMongo Presentation by Metatagg Solutions
Mongo Presentation by Metatagg SolutionsMetatagg Solutions
 
San Francisco Java User Group
San Francisco Java User GroupSan Francisco Java User Group
San Francisco Java User Groupkchodorow
 
Slides python elixir
Slides python elixirSlides python elixir
Slides python elixirAdel Totott
 

Semelhante a The effective use of Django ORM (20)

PyCon APAC - Django Test Driven Development
PyCon APAC - Django Test Driven DevelopmentPyCon APAC - Django Test Driven Development
PyCon APAC - Django Test Driven Development
 
Building Apps with MongoDB
Building Apps with MongoDBBuilding Apps with MongoDB
Building Apps with MongoDB
 
Database madness with_mongoengine_and_sql_alchemy
Database madness with_mongoengine_and_sql_alchemyDatabase madness with_mongoengine_and_sql_alchemy
Database madness with_mongoengine_and_sql_alchemy
 
Javascript Objects Deep Dive
Javascript Objects Deep DiveJavascript Objects Deep Dive
Javascript Objects Deep Dive
 
Write better python code with these 10 tricks | by yong cui, ph.d. | aug, 202...
Write better python code with these 10 tricks | by yong cui, ph.d. | aug, 202...Write better python code with these 10 tricks | by yong cui, ph.d. | aug, 202...
Write better python code with these 10 tricks | by yong cui, ph.d. | aug, 202...
 
jQuery
jQueryjQuery
jQuery
 
Practical Ruby Projects With Mongo Db
Practical Ruby Projects With Mongo DbPractical Ruby Projects With Mongo Db
Practical Ruby Projects With Mongo Db
 
Rails and alternative ORMs
Rails and alternative ORMsRails and alternative ORMs
Rails and alternative ORMs
 
MongoDB, PHP and the cloud - php cloud summit 2011
MongoDB, PHP and the cloud - php cloud summit 2011MongoDB, PHP and the cloud - php cloud summit 2011
MongoDB, PHP and the cloud - php cloud summit 2011
 
Practical Ruby Projects with MongoDB - Ruby Kaigi 2010
Practical Ruby Projects with MongoDB - Ruby Kaigi 2010Practical Ruby Projects with MongoDB - Ruby Kaigi 2010
Practical Ruby Projects with MongoDB - Ruby Kaigi 2010
 
The Django Book chapter 5 Models
The Django Book chapter 5 ModelsThe Django Book chapter 5 Models
The Django Book chapter 5 Models
 
The Best (and Worst) of Django
The Best (and Worst) of DjangoThe Best (and Worst) of Django
The Best (and Worst) of Django
 
JSON(JavaScript Object Notation)
JSON(JavaScript Object Notation)JSON(JavaScript Object Notation)
JSON(JavaScript Object Notation)
 
Mongo Presentation by Metatagg Solutions
Mongo Presentation by Metatagg SolutionsMongo Presentation by Metatagg Solutions
Mongo Presentation by Metatagg Solutions
 
Why Our Code Smells
Why Our Code SmellsWhy Our Code Smells
Why Our Code Smells
 
What's new in Django 1.2?
What's new in Django 1.2?What's new in Django 1.2?
What's new in Django 1.2?
 
JSON
JSONJSON
JSON
 
Java scriptforjavadev part2a
Java scriptforjavadev part2aJava scriptforjavadev part2a
Java scriptforjavadev part2a
 
San Francisco Java User Group
San Francisco Java User GroupSan Francisco Java User Group
San Francisco Java User Group
 
Slides python elixir
Slides python elixirSlides python elixir
Slides python elixir
 

Último

GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesBoston Institute of Analytics
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsRoshan Dwivedi
 

Último (20)

GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 

The effective use of Django ORM