このパッケージは、SQLite3データベースの処理を簡単にするためのクラスを提供します。私はそれを可能な限りシンプルにするように努力しました、そして、エラーメッセージは可能な限り役立ちます。メインDatabaseクラスは、データベースからの読み取りと書き込みを処理します。 DatabaseEntryクラスは、単一のデータベースエントリを表します。エントリに新しい値を割り当てるために辞書のように使用できます。例: entry['name'] = "New Name" 。 Queryクラスを使用して、添付のデータベースの有無にかかわらずSQL-Queriesを作成して実行できます。
PIPでインストールします
pip install sqlite-integratedドキュメントはここにあります。
オープンソースコードに興味がある場合は、ここをクリックしてください。
ここで、バージョン0.0.6の最新の変更と機能を参照してください。
クラスをインポートして新しいデータベースを作成することから始めます(データベースファイルへの有効なパスに配置することを忘れないでください)。
from sqlite_integrated import *
db = Database ( "path/to/database.db" , new = True ) new=Trueを渡して、新しいデータベースファイルを作成します。
これで、SQLを使用してテーブルを作成できます。 primary_keyフラグを使用して「プライマリキー」として割り当てられた列を作成することに注意してください。すべてのテーブルには、これらの列のいずれかが必要です(このパッケージは適切に機能するため)。すべてのエントリに一意のIDがあることを確認して、それを追跡できるようにします。
db . create_table ( "people" , [
Column ( "person_id" , "integer" , primary_key = True ),
Column ( "first_name" , "text" ),
Column ( "last_name" , "text" )
])メソッドの概要を使用して、データベース内のテーブルとそのテーブルフィールドのoverview確認できます。
db . overview ()出力:
Tables
people
person_id
first_name
last_name
エントリを追加するには、 add_entryメソッドを使用してください。
db . add_entry ({ "first_name" : "John" , "last_name" : "Smith" }, "people" )もう少し追加しましょう!
db . add_entry ({ "first_name" : "Tom" , "last_name" : "Builder" }, "people" )
db . add_entry ({ "first_name" : "Eva" , "last_name" : "Larson" }, "people" )データベースを表示するには、 table_overviewメソッドを使用できます。
db . table_overview ( "people" )出力:
person_id ║ first_name ║ last_name
══════════╬════════════╬═══════════
1 ║ John ║ Smith
2 ║ Tom ║ Builder
3 ║ Eva ║ Larson
saveして変更を保存します:
db . save ()クラスをインポートし、データベースを開くことから始めます。
from sqlite_integrated import Database
db = Database ( "tests/test.db" )確認するだけで実行できます。
db . overview ()これにより、データベース内のすべてのテーブルのリストが印刷されます。
closeとデータベースを保存して閉じます:
db . close ()エントリを取得することから始めます。この場合、テーブル「顧客」の3番目のエントリ。
entry = db . get_entry_by_id ( "customers" , 3 )今、あなたが望むだけ編集してください!
entry [ "FirstName" ] = "John"
entry [ "LastName" ] = "Newname"
entry [ "City" ] = "Atlantis"テーブルを更新するには、 update_entryメソッドを単純に使用できます。
db . update_entry ( entry )これらの変更をデータベースファイルに保存するには、 save方法を使用します。
from sqlite_integrated import Database
# Loading an existing database
db = Database ( "tests/test.db" )
db . table_overview ( "customers" , max_len = 15 , get_only = [ "FirstName" , "LastName" , "Address" , "City" ])出力:
FirstName ║ LastName ║ Address ║ City
══════════╬══════════════╬══════════════════════════════════════════╬════════════════════
Luís ║ Gonçalves ║ Av. Brigadeiro Faria Lima, 2170 ║ São José dos Campos
Leonie ║ Köhler ║ Theodor-Heuss-Straße 34 ║ Stuttgart
François ║ Tremblay ║ 1498 rue Bélanger ║ Montréal
Bjørn ║ Hansen ║ Ullevålsveien 14 ║ Oslo
František ║ Wichterlová ║ Klanova 9/506 ║ Prague
Helena ║ Holý ║ Rilská 3174/6 ║ Prague
Astrid ║ Gruber ║ Rotenturmstraße 4, 1010 Innere Stadt ║ Vienne
Daan ║ Peeters ║ Grétrystraat 63 ║ Brussels
Kara ║ Nielsen ║ Sønder Boulevard 51 ║ Copenhagen
Eduardo ║ Martins ║ Rua Dr. Falcão Filho, 155 ║ São Paulo
.
.
.
Mark ║ Taylor ║ 421 Bourke Street ║ Sidney
Diego ║ Gutiérrez ║ 307 Macacha Güemes ║ Buenos Aires
Luis ║ Rojas ║ Calle Lira, 198 ║ Santiago
Manoj ║ Pareek ║ 12,Community Centre ║ Delhi
Puja ║ Srivastava ║ 3,Raj Bhavan Road ║ Bangalore
from sqlite_integrated import Database
db = Database . in_memory () # importing the classes
from sqlite_integrated import Database
from sqlite_integrated import Column
from sqlite_integrated import ForeignKey
# Creating a database in memory
db = Database . in_memory ()
# Creating a table of people
db . create_table ( "people" , [
Column ( "PersonId" , "integer" , primary_key = True ),
Column ( "PersonName" , "text" )
])
# Creating a table of groups
db . create_table ( "groups" , [
Column ( "GroupId" , "integer" , primary_key = True ),
Column ( "GroupName" , "text" )
])
# A table that links people and the groups they are part off
db . create_table ( "person_group" , [
Column ( "PersonId" , "integer" , foreign_key = ForeignKey ( "people" , "PersonId" , on_update = "CASCADE" , on_delete = "SET NULL" ))
])
# use more=True to show more column information
db . overview ( more = True )出力:
Tables
people
PersonId [Column(PersonId, integer, PRIMARY KEY)]
PersonName [Column(1, PersonName, text)]
groups
GroupId [Column(GroupId, integer, PRIMARY KEY)]
GroupName [Column(1, GroupName, text)]
person_group
PersonId [Column(PersonId, integer, FOREIGN KEY (PersonId) REFERENCES people (PersonId) ON UPDATE CASCADE ON DELETE SET NULL)]
from sqlite_integrated import Database
# Loading an existing database
db = Database ( "tests/test.db" , verbose = True )
# Select statement
query = db . SELECT ([ "FirstName" ]). FROM ( "customers" ). WHERE ( "FirstName" ). LIKE ( "T%" )
# Printing the query
print ( f"query: { query } " )
# Running the query and printing the results
print ( f"Results: { list ( query . run ()) } " )出力:
query: > SELECT FirstName FROM customers WHERE FirstName LIKE 'T%' <
Executed sql: SELECT FirstName FROM customers WHERE FirstName LIKE 'T%'
Results: [DatabaseEntry(table: customers, data: {'FirstName': 'Tim'}), DatabaseEntry(table: customers, data: {'FirstName': 'Terhi'})]
「T」で始まる名を持つ顧客は2人しかいません。
デフォルトでは、データベースはデータベースで実行されるSQLを端末に印刷します。これはsilent=True to the runメソッドを渡すことで無効にすることができます。
from sqlite_integrated import Database
# Loading an existing database
db = Database ( "tests/test.db" , verbose = True )
# Metadata for the entry we are adding
entry = { "FirstName" : "Test" , "LastName" : "Testing" , "Email" : "[email protected]" }
# Adding the entry to the table called "customers"
db . INSERT_INTO ( "customers" ). VALUES ( entry ). run ()
# A little space
print ()
# Print the table
db . table_overview ( "customers" , get_only = [ "CustomerId" , "FirstName" , "LastName" , "Email" , "City" ], max_len = 10 )出力:
Executed sql: INSERT INTO customers (FirstName, LastName, Email) VALUES ('Test', 'Testing', '[email protected]')
CustomerId ║ FirstName ║ LastName ║ Email ║ City
═══════════╬═══════════╬══════════════╬═══════════════════════════════╬═══════════════════
1 ║ Luís ║ Gonçalves ║ [email protected] ║ São José dos Campos
2 ║ Leonie ║ Köhler ║ [email protected] ║ Stuttgart
3 ║ François ║ Tremblay ║ [email protected] ║ Montréal
4 ║ Bjørn ║ Hansen ║ [email protected] ║ Oslo
5 ║ František ║ Wichterlová ║ [email protected] ║ Prague
.
.
.
56 ║ Diego ║ Gutiérrez ║ [email protected] ║ Buenos Aires
57 ║ Luis ║ Rojas ║ [email protected] ║ Santiago
58 ║ Manoj ║ Pareek ║ [email protected] ║ Delhi
59 ║ Puja ║ Srivastava ║ [email protected] ║ Bangalore
60 ║ Test ║ Testing ║ [email protected] ║ None
from sqlite_integrated import Database
# Loading an existing database
db = Database ( "tests/test.db" )
# Printing an overview of the customers table
db . table_overview ( "customers" , get_only = [ "CustomerId" , "FirstName" , "LastName" , "City" ], max_len = 10 )
# Some space
print ()
# Update all customers with a first name that starts with 'L', so that all their names are now Brian Brianson.
db . UPDATE ( "customers" ). SET ({ "FirstName" : "Brian" , "LastName" : "Brianson" }). WHERE ( "FirstName" ). LIKE ( "L%" ). run ()
# Some more space
print ()
# Printing an overview of the updated customers table
db . table_overview ( "customers" , get_only = [ "CustomerId" , "FirstName" , "LastName" , "City" ], max_len = 10 )出力:
CustomerId ║ FirstName ║ LastName ║ City
═══════════╬═══════════╬══════════════╬════════════════════
1 ║ Luís ║ Gonçalves ║ São José dos Campos
2 ║ Leonie ║ Köhler ║ Stuttgart
3 ║ François ║ Tremblay ║ Montréal
4 ║ Bjørn ║ Hansen ║ Oslo
5 ║ František ║ Wichterlová ║ Prague
.
.
.
55 ║ Mark ║ Taylor ║ Sidney
56 ║ Diego ║ Gutiérrez ║ Buenos Aires
57 ║ Luis ║ Rojas ║ Santiago
58 ║ Manoj ║ Pareek ║ Delhi
59 ║ Puja ║ Srivastava ║ Bangalore
CustomerId ║ FirstName ║ LastName ║ City
═══════════╬═══════════╬══════════════╬════════════════════
1 ║ Brian ║ Brianson ║ São José dos Campos
2 ║ Brian ║ Brianson ║ Stuttgart
3 ║ François ║ Tremblay ║ Montréal
4 ║ Bjørn ║ Hansen ║ Oslo
5 ║ František ║ Wichterlová ║ Prague
.
.
.
55 ║ Mark ║ Taylor ║ Sidney
56 ║ Diego ║ Gutiérrez ║ Buenos Aires
57 ║ Brian ║ Brianson ║ Santiago
58 ║ Manoj ║ Pareek ║ Delhi
59 ║ Puja ║ Srivastava ║ Bangalore
from sqlite_integrated import Database
from sqlite_integrated import Query
from sqlite_integrated import Column
# Creating a database in memory
db = Database . in_memory ()
# Adding a table of people
db . create_table ( "people" , [
Column ( "id" , "integer" , primary_key = True ),
Column ( "name" , "text" )
])
# Adding a few people
db . add_entry ({ "name" : "Peter" }, "people" )
db . add_entry ({ "name" : "Anna" }, "people" )
db . add_entry ({ "name" : "Tom" }, "people" )
db . add_entry ({ "name" : "Mads" }, "people" )
db . add_entry ({ "name" : "Simon" }, "people" )
db . add_entry ({ "name" : "Emillie" }, "people" )
db . add_entry ({ "name" : "Mathias" }, "people" )
db . add_entry ({ "name" : "Jakob" }, "people" )
# ids of entries to delete
ids = [ 1 , 2 , 5 , 7 ]
print ( "Before deletion:" )
db . table_overview ( "people" , max_len = 10 )
# Deletes the ids from the 'people' table
for c_id in ids :
db . DELETE_FROM ( "people" ). WHERE ( "id" , c_id ). run ()
print ( "After deletion:" )
db . table_overview ( "people" , max_len = 10 )出力:
Before deletion:
id ║ name
═══╬══════════
1 ║ Peter
2 ║ Anna
3 ║ Tom
4 ║ Mads
5 ║ Simon
6 ║ Emillie
7 ║ Mathias
8 ║ Jakob
After deletion:
id ║ name
═══╬══════════
3 ║ Tom
4 ║ Mads
6 ║ Emillie
8 ║ Jakob
from sqlite_integrated import Database
from sqlite_integrated import Query
# Loading an existing database
db1 = Database ( "tests/test.db" , verbose = True )
# Loading the same database to a different variable
db2 = Database ( "tests/test.db" , verbose = True )
# Updating the first entry in the first database only
db1 . UPDATE ( "customers" ). SET ({ "FirstName" : "Allan" , "LastName" : "Changed" }). WHERE ( "CustomerId" , 1 ). run ()
# This query gets the first entry in the customers table
query = Query (). SELECT (). FROM ( "customers" ). WHERE ( "CustomerId = 1" )
# Running the query on each database and printing the output.
out1 = list ( query . run ( db1 ))
out2 = list ( query . run ( db2 ))
# Printing the outputs
print ( f" n db1 output: n { out1 } " )
print ( f" n db2 output: n { out2 } " )出力:
Executed sql: UPDATE customers SET FirstName = 'Allan', LastName = 'Changed' WHERE CustomerId = 1
Executed sql: SELECT * FROM customers WHERE CustomerId = 1
Executed sql: SELECT * FROM customers WHERE CustomerId = 1
db1 output:
[DatabaseEntry(table: customers, data: {'CustomerId': 1, 'FirstName': 'Allan', 'LastName': 'Changed', 'Company': 'Embraer - Empresa Brasileira de Aeronáutica S.A.', 'Address': 'Av. Brigadeiro Faria Lima, 2170', 'City': 'São José dos Campos', 'State': 'SP', 'Country': 'Brazil', 'PostalCode': '12227-000', 'Phone': '+55 (12) 3923-5555', 'Fax': '+55 (12) 3923-5566', 'Email': '[email protected]', 'SupportRepId': 3})]
db2 output:
[DatabaseEntry(table: customers, data: {'CustomerId': 1, 'FirstName': 'Luís', 'LastName': 'Gonçalves', 'Company': 'Embraer - Empresa Brasileira de Aeronáutica S.A.', 'Address': 'Av. Brigadeiro Faria Lima, 2170', 'City': 'São José dos Campos', 'State': 'SP', 'Country': 'Brazil', 'PostalCode': '12227-000', 'Phone': '+55 (12) 3923-5555', 'Fax': '+55 (12) 3923-5566', 'Email': '[email protected]', 'SupportRepId': 3})]
このコードを追加または変更するのに十分に便利だと誰かが見つけたら、私は幸せです。