Maison  >  Questions et réponses  >  le corps du texte

L'opération LIKE de Django.

<p>J'essaie d'envoyer une requête via Python de Django et j'essaie également d'empêcher toute attaque par injection SQL. <br /><br />Quelqu'un peut-il expliquer comment fonctionne la messagerie ? Par exemple, un exemple de requête LIKE. </p><p><br /></p> <pre class="brush:php;toolbar:false;">"SELECT * FROM admin WHERE nom LIKE '%myTitle%'</pre> <p>Il est facile de configurer des requêtes comme celle-ci. </p> <p><code>cursor.execute("SELECT * FROM admin WHERE name= %s", (_id, ))</code>;</p> <p>Mais il est facile de se tromper en annulant le %% dans le texte lors de l'insertion de %s, par exemple. </p> <pre class="brush:php;toolbar:false;">SELECT * FROM admin WHERE nom LIKE %s</pre> <p>Une fois la requête terminée, elle ressemblera à ceci. </p> <pre class="brush:php;toolbar:false;">SELECT * FROM admin OÙ nom 'MonTitre'</pre> <p>Il est implémenté correctement, mais je souhaite que %% soit défini entre %s et LIKE. </p> <pre class="brush:php;toolbar:false;">SELECT * FROM admin WHERE nom '%MyTitle%'</pre> <p>Quelqu'un peut-il expliquer comment résoudre ce problème ? <br /><br />Mon script simple est le suivant :</p><p><br /></p> <pre class="brush:php;toolbar:false;">à partir de la connexion d'importation django.db titre = "monTitre" query = "SELECT * FROM admin WHERE nom LIKE %s" avec connection.cursor() comme curseur : curseur.execute(requête, (titre,))</pre> <p><br /></p>
P粉425119739P粉425119739444 Il y a quelques jours455

répondre à tous(1)je répondrai

  • P粉293550575

    P粉2935505752023-08-03 13:21:22

    Veuillez consulter cette page.

    Quel est l'équivalent SQL "LIKE" sur les requêtes Django ORM ?

    C'est la méthode ORM de Django.

    https://docs.djangoproject.com/en/4.2/topics/db/sql/

    C'est ainsi que Django gère les requêtes brutes.

    >>> query = "SELECT * FROM myapp_person WHERE last_name = %s" % lname
    >>> Person.objects.raw(query)

    Ce que vous montrez n'est pas du code Django, mais du pur code Python-MySQL.

    Avec Python-MySQL, vous pouvez le faire comme vous l'avez fait et il gérera les devis et les problèmes d'injection.

    Mais tu devrais.


    title_like = f"%{title}%"
    cursor.execute(query, (title_like,))

    title_like est une chaîne de correspondance floue.

    mysql comme une chaîne qui contient %

    répondre
    0
  • Annulerrépondre