Wednesday, October 24, 2018

Re: Django auto-deletes field related to MySQL Transactions

Hi Mark,

I did at one point, but I don't any longer ( I use RESTRICT now). 

Would you guys mind if I attached a copy of the app for review?

Thank you!

On Wednesday, October 24, 2018 at 6:36:12 PM UTC-5, mark wrote:
Just a wild guess - do you have a cascade delete in your models that is causing the deletion? Is a user deleting another object, and that is triggering a cascade delete on a different model?

Mark

On Wed, Oct 24, 2018 at 4:22 PM RyanW <rwhit...@gmail.com> wrote:
Yes, it is. Are you referring to 'delete' method in my views?

On Wednesday, October 24, 2018 at 1:24:12 PM UTC-5, C. Kirby wrote:
Is this happening to production users? It is probably because their browser is doing pre-fetch of links to speed up their UX. GET request are considered by the browser to be safe (non-destructive) and ideally idempotent. YOu should _never_ put a destructive action behind a GET, it should always be behind a POST or (even better if you are going the full REST route) DELETE.

On Wednesday, October 24, 2018 at 11:10:33 AM UTC-4, RyanW wrote:
I've tried two separate MySQL db's on two separate servers.  They both have given me deletes.  What's strange is that I've set up a local copy on my laptop with both a local Postgres DB and MySQL connection, and I don't get the same deletes.

I've narrowed it down that it must be something the users are doing to trigger these deletes, based on logs that would've put them active during a time of a delete.

On Wednesday, October 24, 2018 at 10:03:00 AM UTC-5, Matthew Pava wrote:

I can't see anything wrong with what you've presented.  Try generating a new database and using that.  See if you still get random deletes on that database.

 

From: django...@googlegroups.com [mailto:django...@googlegroups.com] On Behalf Of RyanW
Sent: Wednesday, October 24, 2018 9:51 AM
To: Django users
Subject: Re: Django auto-deletes field related to MySQL Transactions

 

Hi Matthew and Joel. Thanks for your help.

 

I'm attaching the models.py, views.py and templates for your reference.  I'm drawing a blank on the implementation that could trigger a delete.

 

Thanks again


On Tuesday, October 23, 2018 at 11:54:17 AM UTC-5, Matthew Pava wrote:

And make sure your form is posting to the save view and not the delete view.  Maybe show us your template.

 

From: django...@googlegroups.com [mailto:django...@googlegroups.com] On Behalf Of Joel
Sent: Tuesday, October 23, 2018 11:32 AM
To: django...@googlegroups.com
Subject: Re: Django auto-deletes field related to MySQL Transactions

 

You could have a signal which captures all these and logs its origin.

 

On Tue, 23 Oct, 2018, 9:35 PM RyanW, <rwhit...@gmail.com> wrote:

Yes, I honestly don't see how Django could be doing this either.  The only I could think of was user deletion, but no one has claimed to have done so.

 

No other apps are connected.

 

Thanks for the tip!!


On Tuesday, October 23, 2018 at 10:05:51 AM UTC-5, Matthew Pava wrote:

It doesn't seem like Django would be doing this.

Do you have any other apps connected to the database?

You'll probably want to surround your URL in quotation marks.  <a href="{% url 'epedelete' epe.id %}">

 

 

From: django...@googlegroups.com [mailto:django...@googlegroups.com] On Behalf Of RyanW
Sent: Tuesday, October 23, 2018 9:33 AM
To: Django users
Subject: Re: Django auto-deletes field related to MySQL Transactions

 

I have a button to delete a record by the user, displayed inside a template as:

 

<td><a href={% url 'epedelete' epe.id %}><input class="btn btn-danger" type="button" value="Delete" /></a></td>


and the function in views.py

 

def delete(request, part_id=None):

    obj = epe.objects.get(id=part_id)

    obj.delete()

    return HttpResponseRedirect(reverse('epe_home'))


Other than that, I have some ForeignKey restraints on_delete to preserve integrity, like so:

    epe_ani2 = models.ForeignKey(

        Subjects,

        on_delete=models.PROTECT,

        null=True,

        blank=True

    )


As for the authentication backend, I'm using the default provided by Django:

['django.contrib.auth.backends.ModelBackend']

 

Thank you for the help!


On Tuesday, October 23, 2018 at 9:16:24 AM UTC-5, Matthew Pava wrote:

Check your source code for any delete commands.

This might also be your authentication backend.  Which one are you using?

 

From: django...@googlegroups.com [mailto:django...@googlegroups.com] On Behalf Of RyanW
Sent: Monday, October 22, 2018 7:55 PM
To: Django users
Subject: Django auto-deletes field related to MySQL Transactions

 

I have a Django site I'm developing, which I've connected to a MySQL db.  I haven't deployed into production yet, as I'm still working on a couple of things, however I leave the server running in development for initial data entry. 

 

I've noticed that some of the records already inputted gets deleted, seemingly randomly. I enabled logging on MySQL and found logs like the following:

 

6798 Connect
ryan45@cobb
.eyes.uab.edu on downswebdb2

6798 Query
SET NAMES utf8

6798 Query
set autocommit=0

6798 Query
set autocommit=1

6798 Query
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED

6798 Query
SELECT `Epe_epe`.`id`, `Epe_epe`.`epe_type`, `Epe_epe`.`epe_type2_id`, `Epe_epe`.`epe_date`, `Epe_epe`.`epe_ani`, `Epe_epe`.`epe_ani2_id`, `Epe_epe`.`epe_apn`, `Epe_epe`.`epe_apn2_id`, `Epe_epe`.`epe_weight`, `Epe_epe`.`epe_drug_type1`, `Epe_epe`.`epe_drug1`, `Epe_epe`.`epe_dose1`, `Epe_epe`.`epe_amount1`, `Epe_epe`.`epe_route1`, `Epe_epe`.`epe_time1`, `Epe_epe`.`epe_drug_type2`, `Epe_epe`.`epe_drug2`, `Epe_epe`.`epe_dose2`, `Epe_epe`.`epe_amount2`, `Epe_epe`.`epe_route2`, `Epe_epe`.`epe_time2`, `Epe_epe`.`epe_drug_type3`, `Epe_epe`.`epe_drug3`, `Epe_epe`.`epe_dose3`, `Epe_epe`.`epe_amount3`, `Epe_epe`.`epe_route3`, `Epe_epe`.`epe_time3`, `Epe_epe`.`epe_drug_type4`, `Epe_epe`.`epe_drug4`, `Epe_epe`.`epe_dose4`, `Epe_epe`.`epe_amount4`, `Epe_epe`.`epe_route4`, `Epe_epe`.`epe_time4`, `Epe_epe`.`epe_drug_type5`, `Epe_epe`.`epe_drug5`, `Epe_epe`.`epe_dose5`, `Epe_epe`.`epe_amount5`, `Epe_epe`.`epe_route5`, `Epe_epe`.`epe_time5`, `Epe_epe`.`epe_drug_type6`, `Epe_epe`.`epe_drug6`, `Epe_epe`.`epe_dose6`, `Epe_epe`.`epe_amount6`, `Epe_epe`.`epe_route6`, `Epe_epe`.`epe_time6`, `Epe_epe`.`epe_iso_start`, `Epe_epe`.`epe_iso_end`, `Epe_epe`.`epe_o2_end`, `Epe_epe`.`epe_start1`, `Epe_epe`.`epe_start2`, `Epe_epe`.`epe_start3`, `Epe_epe`.`epe_start4`, `Epe_epe`.`epe_start5`, `Epe_epe`.`epe_start6`, `Epe_epe`.`epe_start7`, `Epe_epe`.`epe_start8`, `Epe_epe`.`epe_hr1`, `Epe_epe`.`epe_hr2`, `Epe_epe`.`epe_hr3`, `Epe_epe`.`epe_hr4`, `Epe_epe`.`epe_hr5`, `Epe_epe`.`epe_hr6`, `Epe_epe`.`epe_hr7`, `Epe_epe`.`epe_hr8`, `Epe_epe`.`epe_spo2_1`, `Epe_epe`.`epe_spo2_2`, `Epe_epe`.`epe_spo2_3`, `Epe_epe`.`epe_spo2_4`, `Epe_epe`.`epe_spo2_5`, `Epe_epe`.`epe_spo2_6`, `Epe_epe`.`epe_spo2_7`, `Epe_epe`.`epe_spo2_8`, `Epe_epe`.`epe_temp1`, `Epe_epe`.`epe_temp2`, `Epe_epe`.`epe_temp3`, `Epe_epe`.`epe_temp4`, `Epe_epe`.`epe_temp5`, `Epe_epe`.`epe_temp6`, `Epe_epe`.`epe_temp7`, `Epe_epe`.`epe_temp8`, `Epe_epe`.`epe_etco2_1`, `Epe_epe`.`epe_etco2_2`, `Epe_epe`.`epe_etco2_3`, `Epe_epe`.`epe_etco2_4`, `Epe_epe`.`epe_etco2_5`, `Epe_epe`.`epe_etco2_6`, `Epe_epe`.`epe_etco2_7`, `Epe_epe`.`epe_etco2_8`, `Epe_epe`.`epe_rr1`, `Epe_epe`.`epe_rr2`, `Epe_epe`.`epe_rr3`, `Epe_epe`.`epe_rr4`, `Epe_epe`.`epe_rr5`, `Epe_epe`.`epe_rr6`, `Epe_epe`.`epe_rr7`, `Epe_epe`.`epe_rr8`, `Epe_epe`.`epe_comment` FROM `Epe_epe` WHERE `Epe_epe`.`id` = 1508

6798 Query
set autocommit=0

6798 Query
DELETE FROM `Epe_epe` WHERE `Epe_epe`.`id` IN (1508)

6798 Query
commit

6798 Query
set autocommit=1

6798 Quit

Where Epe_epe is from a model called Epe in my Django app. 


As far as I know, no user is performing delete commands on these records, so can I assume Django is performing these deletes in the background?  What would a trigger possibly be for these deletes?

 

Thank you

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.
To post to this group, send email to djang...@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/91c6af18-cdf0-45f4-9f1c-e865c7128334%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.
To post to this group, send email to djang...@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/0be635cb-6f54-451c-ae92-07b38841e6c6%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.
To post to this group, send email to djang...@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/59a2ed67-2e8a-4864-9495-7d8e1810c4ad%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.
To post to this group, send email to djang...@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CAA%3Diw__WFtVJ6-zT793z8y-ZOf%2BcmLjAbJ%2B-9NaOT9mHtq6R0A%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.
To post to this group, send email to djang...@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/1ae1ce38-8148-46bc-8a65-99569aeef9bc%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.
To post to this group, send email to django...@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/fbe8c752-4195-4f60-8d12-6e0c909a75af%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/53339d2a-093e-4333-b6ae-bd6f15ddeeff%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

No comments:

Post a Comment