Maison  >  Article  >  développement back-end  >  Explication détaillée des étapes d'exploitation de la base de données SQLite en Python

Explication détaillée des étapes d'exploitation de la base de données SQLite en Python

黄舟
黄舟original
2017-06-18 11:22:132125parcourir

Cet article présente principalement la méthode d'exploitation de la base de données SQLite en Python. Il fournit une analyse plus détaillée de l'installation par Python du module de base de données SQLite et des techniques d'exploitation courantes pour la base de données SQLite. Les amis dans le besoin peuvent se référer à

Ceci. L'article explique les exemples. Découvrez comment Python exploite les bases de données SQLite. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

Une brève introduction à SQLite

La base de données SQLite est une base de données intégrée très compacte logiciel de base de données open source , c'est-à-dire qu'il n'y a pas de processus de maintenance indépendant et que toute la maintenance provient du programme lui-même. Il s'agit d'un système de gestion de base de données relationnelle conforme à ACID. Sa cible de conception est intégrée et il a été utilisé dans de nombreux produits embarqués. Il occupe très peu de ressources. Dans les appareils embarqués, il ne peut nécessiter que quelques centaines de Ko de mémoire. assez. Il peut prendre en charge les systèmes d'exploitation courants tels que Windows/Linux/Unix et peut être combiné avec de nombreux langages de programmation, tels que Tcl, C#, PHP, Java, etc., ainsi qu'avec les interfaces ODBC. Il est également comparé aux deux interfaces ouvertes. mondes sources de Mysql et PostgreSQL En termes de systèmes de gestion de bases de données célèbres, sa vitesse de traitement est plus rapide que tous. La première version Alpha de SQLite est née en mai 2000. Cela fait maintenant 10 ans, et SQLite a également inauguré la sortie d'une version SQLite 3.

Installation et utilisation

1. Importez le module de base de données Python SQLITE

Après Python2. 5 , SQLite3 intégré, devient un module intégré, ce qui nous évite l'effort d'installation, il suffit de l'importer~


import sqlite3

2. Créer / Ouvrir la base de données

Lors de l'appel de la fonction de connexion, spécifiez le nom de la bibliothèque. Si la base de données spécifiée existe, ouvrez la base de données directement. Si elle n'existe pas, créez-en une nouvelle et ouvrez-la.


cx = sqlite3.connect("E:/test.db")

Vous pouvez également créer une base de données en mémoire.


con = sqlite3.connect(":memory:")

3. Objet de connexion à la base de données

L'objet cx renvoyé lors de l'ouverture de la base de données est un objet de connexion à la base de données, qui peut Il existe les opérations suivantes :

① commit()--Soumission de transaction
② rollback()--Annulation de transaction
③ close()--Fermer une connexion à une base de données
④ curseur () --Créez un curseur

Concernant commit(), si le niveau d'isolation isolation_level est par défaut, vous devez utiliser cette commande pour chaque opération sur la base de données. Vous pouvez également définir isolation_level=None, de sorte que. cela devient un modèle de soumission automatique.

4.Utilisez le curseur pour interroger la base de données

Nous devons utiliser l'instruction SQL de l'objet curseur pour interroger la base de données et obtenir l'objet de requête . Définissez un curseur des manières suivantes.

cu=cx.cursor()

L'objet curseur a les opérations suivantes :

①execut()--exécute l'instruction SQL
②executemany--exécuter plusieurs instructions SQL
③ close()--fermer le curseur
④ fetchone()--prendre un enregistrement du résultat et pointer le curseur vers l'enregistrement suivant
⑤ fetchmany( ) --Récupérer plusieurs enregistrements du résultat
⑥ fetchall()--Récupérer tous les enregistrements du résultat
⑦ scroll()--Défilement du curseur

Créer une table

Copier le code Le code est le suivant :

cu.execute("créer un catalogue de tables (id

entier clé primaire,pid entier, name varchar( 10) UNIQUE, pseudo text NULL)")

L'instruction ci-dessus crée une table appelée catalog, qui a un identifiant de clé primaire, un pid et un nom. Le nom ne peut pas être répété et un La valeur par défaut du surnom est NULL.

2. Insérer des données

Veuillez faire attention à éviter l'écriture suivante :


# Never do this -- insecure 会导致注入攻击
pid=200
c.execute("... where pid = '%s'" % pid)
L'approche correcte est la suivante. Si t n'est qu'une seule valeur, elle doit également être sous la forme t=(n,), car le tuple est immuable.


for t in[(0,10,'abc','Yu'),(1,20,'cba','Xu')]:
  cx.execute("insert into catalog values (?,?,?,?)", t)
Insérez simplement deux lignes de données, mais il faut rappeler qu'elles ne prendront effet qu'après leur soumission. Nous utilisons l'objet de connexion à la base de données cx pour. soumettre et valider l'opération de restauration.


cx.commit()

Requête


cu.execute("select * from catalog")
Pour extraire les données interrogées, utilisez la fonction fetch du curseur, telle que :


In [10]: cu.fetchall()
Out[10]: [(0, 10, u'abc', u'Yu'), (1, 20, u'cba', u'Xu')]
Si nous utilisons cu.fetchone(), le premier dans la liste sera renvoyée en premier. Si l'article est à nouveau utilisé, revenez au deuxième article et procédez dans l'ordre

4. Remarque, modification Soumettre les données plus tard


5 Supprimer

In [12]: cu.execute("update catalog set name='Boy' where id = 0")
In [13]: cx.commit()

6. . Utilisez le chinois


Veuillez d'abord vous assurer que l'encodage par défaut de votre IDE ou de votre système est utf-8, et ajoutez u
cu.execute("delete from catalog where id = 1") 
cx.commit()

avant le chinois.

x=u'鱼'
cu.execute("update catalog set name=? where id = 0",x)
cu.execute("select * from catalog")
cu.fetchall()
[(0, 10, u'\u9c7c', u'Yu'), (1, 20, u'cba', u'Xu')]

如果要显示出中文字体,那需要依次打印出每个字符串


In [26]: for item in cu.fetchall():
  ....:   for element in item:
  ....:     print element,
  ....:   print
  ....: 
0 10 鱼 Yu
1 20 cba Xu

7.Row类型

Row提供了基于索引和基于名字大小写敏感的方式来访问列而几乎没有内存开销。 原文如下:

sqlite3.Row provides both index-based and case-insensitive name-based access to columns with almost no memory overhead. It will probably be better than your own custom dictionary-based approach or even a db_row based solution.

Row对象的详细介绍

class sqlite3.Row
A Row instance serves as a highly optimized row_factory for Connection objects. It tries to mimic a tuple in most of its features.
It supports mapping access by column name and index, iteration, representation, equality testing and len().
If two Row objects have exactly the same columns and their members are equal, they compare equal.
Changed in version 2.6: Added iteration and equality (hashability).
keys()
This method returns a tuple of column names. Immediately after a query, it is the first member of each tuple in Cursor.description.
New in version 2.6.

下面举例说明


In [30]: cx.row_factory = sqlite3.Row
In [31]: c = cx.cursor()
In [32]: c.execute('select * from catalog')
Out[32]: <sqlite3.Cursor object at 0x05666680>
In [33]: r = c.fetchone()
In [34]: type(r)
Out[34]: <type &#39;sqlite3.Row&#39;>
In [35]: r
Out[35]: <sqlite3.Row object at 0x05348980>
In [36]: print r
(0, 10, u&#39;\u9c7c&#39;, u&#39;Yu&#39;)
In [37]: len(r)
Out[37]: 4
In [39]: r[2]      #使用索引查询
Out[39]: u&#39;\u9c7c&#39;
In [41]: r.keys()
Out[41]: [&#39;id&#39;, &#39;pid&#39;, &#39;name&#39;, &#39;nickname&#39;]
In [42]: for e in r:
  ....:   print e,
  ....: 
0 10 鱼 Yu

使用列的关键词查询


In [43]: r[&#39;id&#39;]
Out[43]: 0
In [44]: r[&#39;name&#39;]
Out[44]: u&#39;\u9c7c&#39;

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn