L'opération LIKE de Django.
P粉425119739
P粉425119739 2023-08-02 15:55:17
0
1
476
<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粉425119739
P粉425119739

répondre à tous(1)
P粉293550575

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 %

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!