ホームページ  >  記事  >  バックエンド開発  >  PythonでSQLiteデータベースを操作する手順を詳しく解説

PythonでSQLiteデータベースを操作する手順を詳しく解説

黄舟
黄舟オリジナル
2017-06-18 11:22:132075ブラウズ

この記事では、Python による SQLite データベースの操作方法を主に紹介し、Python による sqlite データベース モジュールのインストールと一般的な sqlite データベースの操作テクニックを説明します。この記事の例は、 Pythonを使用してSQLiteデータベースを操作する方法。参考までに皆さんと共有してください。詳細は次のとおりです:

SQLite の簡単な紹介SQLite データベースは、非常に小さな組み込みのオープン ソース データベース ソフトウェアです。つまり、独立したメンテナンス プロセスがなく、すべてのメンテナンスが行われます。プログラム自体から来ています。これは、ACID に準拠したリレーショナル データベース管理システムであり、多くの組み込み製品で使用されており、組み込みデバイスではわずか数 100 K のメモリしか必要としません。十分。 Windows/Linux/Unix などの主流のオペレーティング システムをサポートし、Tcl、C#、PHP、Java などの多くのプログラミング言語や 2 つのオープンな ODBC インターフェイスと組み合わせることができます。 Mysql や PostgreSQL のソースの世界では、有名なデータベース管理システムよりも処理速度が高速です。 SQLite の最初のアルファ バージョンは 2000 年 5 月に誕生しました。それから 10 年が経ち、SQLite のバージョンもリリースされました。

インストールと使用

1. Python SQLITEデータベースモジュールをインポートします

Python2.5以降、SQLite3が組み込まれ、組み込みモジュールになります。これにより、インストールの手間が省かれ、簡単になります。 ~

import sqlite3


2. データベースを作成/開く

指定したデータベースが存在する場合は、データベースを直接開きます。新しいものを選んで開けます。

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

メモリ内に
データベースを作成

することもできます。

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


3. データベース接続オブジェクト

データベースを開くときに返されるオブジェクト cx は、次の操作を持つことができます:

① commit()--トランザクション送信

② rollback( )- -トランザクションのロールバック

③ close()--データベース接続を閉じる

④cursor()-- カーソルを作成する

commit() については、isolation_level 分離レベルがデフォルトの場合、すべての操作でこれを使用する必要がありますデータベース コマンドで、isolation_level=None を設定することもできます。これにより、自動送信モードに変更されます。

4.

カーソル

を使用してデータベースをクエリするデータベースをクエリし、クエリオブジェクトを取得するには、カーソルオブジェクトのSQLステートメントを使用する必要があります。 次の方法でカーソルを定義します。

cu=cx.cursor()

カーソルオブジェクトには次の操作があります:

①execute()--SQL文を実行②executemany--複数のSQL文を実行

③close()--を閉じるカーソル

④ fetchone() -- 結果から 1 つのレコードを取得し、カーソルを次のレコードにポイントします
⑤ fetchmany() -- 結果から複数のレコードを取得します
⑥ fetchall() -- 結果からすべてのレコードを取得します
⑦スクロール()--カーソルスクロール


1.テーブルを作成します

コードをコピーします

コードは次のとおりです:

cu.execute("create table category (id integer

主キー,pid integer,name varchar) (10) UNIQUE、ニックネーム テキスト NULL)")

上記のステートメントは、主キー ID、PID、および名前を持つ、catalog というテーブルを作成します。名前は繰り返すことができず、ニックネームのデフォルトは NULL です。

2.

データの挿入

次のような記述は避けてください:

# Never do this -- insecure 会导致注入攻击
pid=200
c.execute("... where pid = '%s'" % pid)

t が単一の値の場合、次の形式にする必要があります。タプルは不変であるため、t=(n,)。

for t in[(0,10,'abc','Yu'),(1,20,'cba','Xu')]:
  cx.execute("insert into catalog values (?,?,?,?)", t)

単に 2 行のデータを挿入するだけですが、それは送信後にのみ有効になることに注意してください。コミットおよびロールバック操作を実行するためにデータベース接続オブジェクト cx を使用します。

cx.commit()


3. クエリ

cu.execute("select * from catalog")

クエリされたデータを抽出するには、次のようなカーソルの fetch 関数を使用します。

In [10]: cu.fetchall()
Out[10]: [(0, 10, u'abc', u'Yu'), (1, 20, u'cba', u'Xu')]

cu.fetchone() を使用すると、リストの最初の項目が最初に返されます。再度使用する場合は、2 番目の項目に戻り、順番に進みます

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

注意、データを修正してから送信してください


cu.execute("delete from catalog where id = 1") 
cx.commit()

6.中国語

まず、IDE またはシステムのデフォルトのエンコーディングが utf-8 であることを確認し、中国語の前に u

を追加してください

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;

以上がPythonでSQLiteデータベースを操作する手順を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。