[Einführung in Python3 Tag 19] Kapitel 8 Datenziele (8.4-8.5)

8.4 NoSQL-Datenspeicher

8.4.1 dbm Familie


#"c"Der Modus ist lesen und schreiben
>>> db=dbm.open("definitions","c")
#Weisen Sie den Schlüsseln Werte wie in einem Wörterbuch zu.
>>> db["mustard"]="yellow"
>>> db["ketchup"]="red"
>>> db["pesto"]="green"
>>> db.close
<built-in method close of _dbm.dbm object at 0x101bb0290>
>>> db.close()
#Überprüfen Sie, ob die neu geschriebene Version tatsächlich gespeichert ist.
>>> db=dbm.open("definitions","r")
#Schlüssel und Werte werden als Bytes gespeichert.
>>> db["mustard"]
b'yellow'


8.4.2 memcached

8.4.3 Redis

8.4.3.1 String

Error



>>> import redis
#Stellen Sie eine Verbindung zum Redis-Server her.
>>> conn=redis.Redis()
>>> conn.keys("*")
#Ein Fehler ist aufgetreten.

――Ich habe den folgenden Fehler erhalten und ihn ungefähr eine Stunde lang untersucht. ⇨ ** Der Fehler wurde durch die Installation von redis mit Homebrew behoben. ** **.

Problemumgehung



During handling of the above exception, another exception occurred:

$ brew search redis
==> Successfully started `redis` (label: homebrew.mxcl.redis)

Ergebnis



>>> import redis
>>> conn = redis.Redis()
>>> conn.keys()
[]
#set()Schreibe Wert von.
>>> conn.set("secret","ni!")
True
>>> conn.set("caratst","24")
True
>>> conn.set("fever","101.5")
True

#Lesen Sie den Wert mit dem Schlüssel.
>>> conn.get("secret")
b'ni!'
>>> conn.get("caratst")
b'24'
>>> conn.get("fever")
b'101.5'

#setnx()Die Methode legt den Wert fest, sofern der Schlüssel nicht vorhanden ist.
>>> conn.setnx("secret","icky-icky-icky-ptang-zoop-boing!")
False
>>> conn.get("secret")
b'ni!'

#getset()Die Methode gibt den ursprünglichen Wert zurück und legt den neuen Wert fest.
>>> conn.getset("secret","icky-icky-icky-ptang-zoop-boing!")
b'ni!'
>>> conn.get("secret")
b'icky-icky-icky-ptang-zoop-boing!'

#getrange()Extrahiert einen Teilstring.
>>> conn.getrange("secret",-6,-1)
b'boing!'

#setarrange()Ersetzt den Teilstring.
>>> conn.setrange("secret",0,"ICKY")
32
>>> conn.get("secret")
b'ICKY-icky-icky-ptang-zoop-boing!'

#mset()Verwenden Sie diese Option, um mehrere Schlüssel gleichzeitig abzurufen.
>>> conn.mset({"pie":"cherry","cordial":"sherry"})
True

#mget()Verwenden Sie diese Option, um mehrere Werte gleichzeitig abzurufen.
>>> conn.mget(["fever","caratst"])
[b'101.5', b'24']

#Der Schlüssel wird gelöscht.
>>> conn.delete("fever")
1
>>> conn.incr("caratst")
25
>>> conn.decr("caratst",10)
15
>>> conn.set("caratst","24")
True
>>> conn.incr("caratst",10)
34
>>> conn.decr("caratst")
33
>>> conn.decr("caratst",15)
18
>>> conn.set("fever","101.5")
True
>>> conn.incrbyfloat("fever")
102.5
>>> conn.incrbyfloat("fever",0.5)
103.0

#decrbyfloat()Hat ein negatives Inkrement.
>>> conn.incrbyfloat("fever",-2.0)
101.0

8.4.3.2 Liste


#Verwenden Sie lpush, um am Anfang einzufügen.
>>> conn.lpush("zoo","bear")
1
#Fügen Sie am Anfang mehrere Elemente ein.
>>> conn.lpush("zoo","alligator","duck")
3
#linsert()Vor dem Wert mit einfügen.
>>> conn.linsert("zoo","before","bear","behavor")
4
#linsert()Verwenden Sie diese Option, um nach dem Wert einzufügen.
>>> conn.linsert("zoo","after","bear","aaaar")
5
#lset()An der angegebenen Position mit einfügen.
>>> conn.lset("zoo",2,"marmoset")
True

#rpush()Am Ende mit einfügen.
>>> conn.rpush("zoo","marmoset")
6
#lindex()Verwenden Sie diese Option, um den Versatzwert abzurufen.
>>> conn.lindex("zoo",3)
b'bear'
#lrange()Verwenden Sie diese Option, um den Wert im angegebenen Versatzbereich abzurufen.
>>> conn.lrange("zoo",0,2)
[b'duck', b'alligator', b'marmoset']
#ltrim()Verwenden Sie diese Option, um die Liste zu beschneiden. Es bleiben nur die Elemente im angegebenen Versatzbereich.
>>> conn.ltrim("zoo",1,4)
True
>>> conn.lrange("zoo",0,-1)
[b'alligator', b'marmoset', b'bear', b'aaaar']


8.4.3.3 Hash


#hmset()Do to Song Hash mit,Stellen Sie gleichzeitig das Feld re ein.
>>> conn.hmset("song",{"do":"aA","re":"About a deer"})
True
#hset()Verwenden Sie diese Option, um den Wert eines Felds auf ein Feld im Hash festzulegen.
>>> conn.hset("song","mi","a note to follow me")
1
#hget()Um den Wert eines Feldes zu erhalten.
>>> conn.hget("song","mi")
b'a note to follow me'
#hmget()Verwenden Sie diese Option, um die Werte mehrerer Felder abzurufen.
>>> conn.hmget("song","re","do")
[b'About a deer', b'aA']
#hkeys()Verwenden Sie diese Option, um die Schlüssel für alle Felder im Hash abzurufen
>>> conn.hkeys("song")
[b'do', b're', b'mi']
#havals()Holen Sie sich die Werte aller Felder im Hash mit
>>> conn.hvals("song")
[b'aA', b'About a deer', b'a note to follow me']
#Ermitteln Sie die Anzahl der Felder im Hash
>>> conn.hlen("song")
3
#hegetall()Verwenden Sie diese Option, um die Werte und Schlüssel aller Felder im Hash abzurufen.
>>> conn.hgetall("song")
{b'do': b'aA', b're': b'About a deer', b'mi': b'a note to follow me'}
#hsetnx()Verwenden Sie diese Option, um das Feld festzulegen, wenn Sie noch keinen Schlüssel haben.
>>> conn.hsetnx("song","fa","asdf")
1

8.4.3.4 Set


#Fügen Sie dem Satz einen oder mehrere Werte hinzu.
>>> conn.sadd("zoo2","a","b","c")
3
#Holen Sie sich die Anzahl der Werte in der Menge.
>>> conn.scard("zoo2")
3
#Holen Sie sich alle Werte im Set.
>>> conn.smembers("zoo2")
{b'a', b'c', b'b'}
#Entfernen Sie den Wert des Sets.
>>> conn.srem("zoo2","c")
1

#Set-Erstellung
>>> conn.sadd("zoo3","ni","b","a")
3
#Holen Sie sich das Produktset.
>>> conn.sinter("zoo2","zoo3")
{b'a', b'b'}
#Holen Sie sich das Produktset und Set Geflügel_Speichern Sie das Ergebnis im Zoo.
>>> conn.sinterstore("fowl_zoo","zoo2","zoo3")
2
>>> conn.smembers("fowl_zoo")
{b'a', b'b'}

#Erstellen eines Summensatzes
>>> conn.sunion("zoo2","zoo3")
{b'a', b'b', b'ni'}
#Erstellen Sie einen Summensatz und legen Sie die Ergebnisse fest. F._Im Zoo lagern.
>>> conn.sunionstore("f_zoo","zoo2","zoo3")
3
>>> conn.smembers("f_zoo")
{b'a', b'b', b'ni'}

#sdiff()Erstellen Sie einen Differenzsatz mit.(Dinge, die in Zoo2 sind, aber nicht in Zoo3)
>>> conn.sdiff("zoo2","zoo3")
{b'c'}
#Erstellen Sie einen Differenzsatz und legen Sie den Ergebniszoo fest_Laden im Verkauf.
>>> conn.sdiffstore("zoo_sale","zoo2","zoo3")
1
>>> conn.smembers("zoo_sale")
{b'c'}

8.4.3.5 Sortierter Satz

Ergebnis



>>> import time
>>> now=time.time()
>>> now
1579936585.194324
>>> conn.zadd("logins","smeagol",now+(5*60))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File 
    return iter(x.items())
AttributeError: 'str' object has no attribute 'items'


Trainieren



$ pip install --upgrade 
Successfully installed setuptools-45.1.0

8.4.3.6 Bit


>>> days=["2013-02-24","2013-02-25","2013-02-26"]
#Geben Sie die Benutzer-ID an.
>>> big_spender=1089
>>> tire_kicker=40459
>>> late_joiner=550212
#Setzen Sie das Bit für die an diesem Tag angemeldete Benutzer-ID.
>>> conn.setbit(days[0],big_spender,1)
0
>>> conn.setbit(days[0],tire_kicker,1)
0
>>> conn.setbit(days[1],big_spender,1)
0
>>> conn.setbit(days[2],big_spender,1)
0
>>> conn.setbit(days[2],late_joiner,1)
0
#Wer sind die Besucher an jedem Tag der drei Tage?
>>> for day in days:
...     conn.bitcount(day)
... 
2
1
2
>>> conn.getbit(days[1],tire_kicker)
0
>>> conn.getbit(days[1],big_spender)
1

#Wie viele Benutzer melden sich täglich an?
>>> conn.bitop("and","everyday",*days)
68777
>>> conn.bitcount("everyday")
1
#Wer ist es? → groß_spender
>>> conn.getbit("everyday",big_spender)
1
>>> conn.getbit("everyday",tire_kicker)
0
>>> conn.bitop("or","alldays",*days)
68777
>>> conn.bitcount("alldays")
3

8.4.3.7 Cache und Ablaufdatum


>>> import time
>>> key="now you see it"
>>> conn.set(key,"but not fot long")
True
>>> conn.expire(key,5)
True
>>> conn.ttl(key)
-2
>>> conn.get(key)
>>> time.sleep(6)
>>> conn.get(key)
>>> 

8.5 Zuordnung überprüfen

8-1 Setzen Sie die Zeichenfolge "Dies ist ein Test des Notfall-Textsystems" in die Variable test1 ein und schreiben Sie den Inhalt von test1 in die Datei text.txt.


>>> test1="""This is a test of the emergency text system"""
>>> fout=open("text.txt","wt")
>>> fout.write(test1)
43
>>> fout.close()

8-2 Öffnen Sie eine Datei mit dem Namen text.txt und lesen Sie deren Inhalt in die Variable test2 ein. Sind test1 und test2 gleich?


>>> with open("text.txt","rt") as infile:
...     test2=infile.read()
... 
>>> test1==test2
True

8-3 Speichern Sie den folgenden Text in einer Datei namens books.csv.


>>> a="""auther,book
... J R R Tolkien,The Hobbit
... Lynne Truss,"Eats, Shoots & Leaves"
... """

8-4 Verwenden Sie das CSV-Modul und seine DictReader-Methode, um den Inhalt von books.csv in die Variable books zu laden und den Inhalt anzuzeigen.


>>> import csv
>>> with open("books.csv","rt") as fout:
...     books=csv.DictReader(fout)
...     for book in books:
...         print(book)
... 
OrderedDict([('auther', 'J R R Tolkien'), ('book', 'The Hobbit')])
OrderedDict([('auther', 'Lynne Truss'), ('book', 'Eats, Shoots & Leaves')])

8-5 Erstellen Sie eine CSV-Datei mit dem Namen books.csv in den folgenden Zeilen.


>>> text="""title,author,year
... The Weirdstone of Brisingamen,Alan Garner,1960
... Perdido Street Station,China Miéville,2000
... Thud!,Terry Pratchett,2005
... The Spellman Files,Lisa Lutsz,2007
... Small Gods,Terry Pratchett,1992
... """

>>> with open("books.csv","wt") as fout:
...     fout.write(text)
... 
202

8-6 Erstellen Sie mit dem sqlite3-Modul eine SQLiteDB mit dem Namen books.db und erstellen Sie eine Tabelle mit dem Namen book mit den Feldern title, author und book.


>>> import sqlite3
>>> conn=sqlite3.connect("books.db")
>>> curs=conn.cursor()
>>> curs.execute("""CREATE TABLE book(title text,author text,year int)""")
<sqlite3.Cursor object at 0x1029e8960>
>>> db.commit()


8-7 Lesen Sie books.csv und fügen Sie die Daten in die Buchtabelle ein.


>>> import csv
>>> import sqlite3
>>> ins_str ="insert into book values(?,?,?)"
>>> with open("books.csv","rt") as infile:
...     books=csv.DictReader(infile)
...     for book in books:
...         curs.execute(ins_str,(book["title"],book["author"],book["year"]))
... 
<sqlite3.Cursor object at 0x1029e8960>
<sqlite3.Cursor object at 0x1029e8960>
<sqlite3.Cursor object at 0x1029e8960>
<sqlite3.Cursor object at 0x1029e8960>
<sqlite3.Cursor object at 0x1029e8960>
>>> conn.commit()


8-8 Wählen Sie die Titelspalte der Buchtabelle aus und zeigen Sie sie in alphabetischer Reihenfolge an.


#Die Daten wurden beim ersten Mal versehentlich eingefügt. Als ich es erneut versuchte, blieben die vorherigen Daten erhalten. Außerdem habe ich festgestellt, dass SQLite keine Daten löschen kann, es jedoch möglich ist, eine Tabelle zu löschen.
>>> sql="select title from book order by title asc"
>>> for row in conn.execute(sql):
...     print(row)
... 
('    ',)
('        Perdido Street Station',)
('        Small Gods',)
('        The Spellman Files',)
('        The Weirdstone of Brisingamen',)
('        Thud!Terry Pratchett',)
('Perdido Street Station',)
('Small Gods',)
('The Spellman Files',)
('The Weirdstone of Brisingamen',)
('Thud!',)


8-9 Wählen Sie alle Spalten in der Buchtabelle aus und zeigen Sie sie in der Reihenfolge des Veröffentlichungsjahres an.


>>> for row in conn.execute("select * from book order by year"):
...     print(row)
... 
('        Thud!Terry Pratchett', '2005', None)
('    ', None, None)
('        The Weirdstone of Brisingamen', 'Alan Garner', 1960)
('The Weirdstone of Brisingamen', 'Alan Garner', 1960)
('        Small Gods', 'Terry Pratchett', 1992)
('Small Gods', 'Terry Pratchett', 1992)
('        Perdido Street Station', 'China Miéville', 2000)
('Perdido Street Station', 'China Miéville', 2000)
('Thud!', 'Terry Pratchett', 2005)
('        The Spellman Files', 'Lisa Lutsz', 2007)
('The Spellman Files', 'Lisa Lutsz', 2007)


8-10 Stellen Sie eine Verbindung zur Datenbank von books.db von sqlite3 her, die in 8-6 mit dem Modul sqlalchemy erstellt wurde. Wählen Sie die Titelspalte wie in 8-8 aus und zeigen Sie sie in alphabetischer Reihenfolge an.


>>> import sqlalchemy as sa
>>> conn=sa.create_engine("sqlite:///books.db")
>>> sql="select title from book order by title asc"
>>> rows=conn.execute(sql)
>>> for row in rows:
...     print(row)
... 
('    ',)
('        Perdido Street Station',)
('        Small Gods',)
('        The Spellman Files',)
('        The Weirdstone of Brisingamen',)
('        Thud!Terry Pratchett',)
('Perdido Street Station',)
('Small Gods',)
('The Spellman Files',)
('The Weirdstone of Brisingamen',)
('Thud!',)
>>> 


8-11 Installieren Sie den Redis-Server und die Redis-Bibliothek von Python. Erstellen Sie dann einen Redis-Hash namens test mit den Feldern count (1), name ("Fester Besteretester"), um alle Testfelder anzuzeigen.

#Vergessen Sie nicht, das Gebräu neu zu starten!
$ brew services restart redis

>>> import redis
>>> conn=redis.Redis()

>>> conn.hmset("test",{"count":"1","name":"Fester Besteretester"})
True

#Die Ausgabe ist eine Bytevariable.
>>> conn.hgetall("test")
{b'count': b'1', b'name': b'Fester Besteretester'}

Erhöhen wir das Zählfeld von 8-12 Test und zeigen das Ergebnis an.


>>> conn.hincrby("test","count")
2
>>> conn.hget("test","count")
b'2'

Impressionen

Ich habe mehr gelernt und besser verstanden. Danach möchte ich mein Verständnis durch Dokumentation und Online-Recherche vertiefen.

Verweise

"Einführung in Python3 von Bill Lubanovic (veröffentlicht von O'Reilly Japan)"

"Redis-Dokument" http://redis.shibu.jp

"Installieren Sie Redis unter macOS." https://weblabo.oscasierra.net/redis-macos-install-homebrew/

Recommended Posts

[Einführung in Python3, Tag 17] Kapitel 8 Datenziele (8.1-8.2.5)
[Einführung in Python3, Tag 17] Kapitel 8 Datenziele (8.3-8.3.6.1)
[Einführung in Python3 Tag 19] Kapitel 8 Datenziele (8.4-8.5)
[Einführung in Python3 Tag 18] Kapitel 8 Datenziele (8.3.6.2 bis 8.3.6.3)
[Einführung in Python3 Tag 13] Kapitel 7 Zeichenfolgen (7.1-7.1.1.1)
[Einführung in Python3 Tag 14] Kapitel 7 Zeichenfolgen (7.1.1.1 bis 7.1.1.4)
[Einführung in Python3 Tag 15] Kapitel 7 Zeichenfolgen (7.1.2-7.1.2.2)
[Einführung in Python3 Tag 21] Kapitel 10 System (10.1 bis 10.5)
[Einführung in Python3 Tag 12] Kapitel 6 Objekte und Klassen (6.3-6.15)
[Einführung in Python3 Tag 11] Kapitel 6 Objekte und Klassen (6.1-6.2)
[Einführung in Python3, Tag 23] Kapitel 12 Werden Sie Paisonista (12.1 bis 12.6)
[Einführung in Python3 Tag 20] Kapitel 9 Enträtseln des Webs (9.1-9.4)
[Einführung in Python3 Tag 8] Kapitel 4 Py Skin: Codestruktur (4.1-4.13)
[Technisches Buch] Einführung in die Datenanalyse mit Python -1 Kapitel Einführung-
[Einführung in Python3 Tag 1] Programmierung und Python
[Einführung in Python3 Tag 3] Kapitel 2 Py-Komponenten: Numerische Werte, Zeichenfolgen, Variablen (2.2 bis 2.3.6)
[Einführung in Python3 Tag 2] Kapitel 2 Py-Komponenten: Numerische Werte, Zeichenfolgen, Variablen (2.1)
[Einführung in Python3 Tag 4] Kapitel 2 Py-Komponenten: Numerische Werte, Zeichenfolgen, Variablen (2.3.7 bis 2.4)
Einführung in die Überprüfung der Wirksamkeit Kapitel 1 in Python geschrieben
[Einführung in Data Scientist] Grundlagen von Python ♬
[Einführung in Python3 Tag 7] Kapitel 3 Py Tools: Listen, Taples, Wörterbücher, Mengen (3.3-3.8)
[Einführung in Python3 Tag 5] Kapitel 3 Py Tools: Listen, Taples, Wörterbücher, Sets (3.1-3.2.6)
[Einführung in Python3 Tag 10] Kapitel 5 Py's Cosmetic Box: Module, Pakete, Programme (5.4-5.7)
[Einführung in Python3 Tag 6] Kapitel 3 Py-Tool-Liste, Tapple, Wörterbuch, Set (3.2.7-3.2.19)
Einführung in die Python-Sprache
Einführung in OpenCV (Python) - (2)
Einführung in die Überprüfung der Wirksamkeit Kapitel 3 in Python geschrieben
[Einführung in Python] Umgang mit Daten im JSON-Format
Einführung in die Überprüfung der Wirksamkeit Kapitel 2 in Python geschrieben
Einführung in Python Django (2) Win
Python für die Datenanalyse Kapitel 4
[Kapitel 5] Einführung in Python mit 100 Klopfen Sprachverarbeitung
Lesehinweis: Einführung in die Datenanalyse mit Python
Einführung in die serielle Kommunikation [Python]
[Kapitel 3] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Kapitel 2] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Einführung in Python] <Liste> [Bearbeiten: 22.02.2020]
Python für die Datenanalyse Kapitel 2
Einführung in Python (Python-Version APG4b)
Eine Einführung in die Python-Programmierung
Einführung in Python For, While
Python für die Datenanalyse Kapitel 3
[Kapitel 4] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Einführung in cx_Oracle] (Teil 6) Zuordnung von DB- und Python-Datentypen
20200329_Einführung in die Datenanalyse mit Python 2nd Edition Personal Summary
[Einführung in Data Scientists] Grundlagen von Python ♬ Funktionen und Klassen
[Einführung in Python] Kombinieren Sie Nikkei-Durchschnitts- und NY Dow-CSV-Daten
[Python] Einführung in die Diagrammerstellung mit Corona-Virendaten [Für Anfänger]
[Einführung in Python] So erhalten Sie Daten mit der Funktion listdir
[Einführung in die Udemy Python3 + -Anwendung] 58. Lambda
[Python] Wie man MP3-Daten fFT
Data Scientist Training Course Kapitel 2 Tag 2
Einführung in die Python Numerical Calculation Library NumPy
Trainieren! !! Einführung in Python Type (Type Hints)
Data Scientist Training Course Kapitel 3 Tag 3
[Einführung in Python] <numpy ndarray> [edit: 2020/02/22]
Data Scientist Training Course Kapitel 4 Tag 1
[Einführung in die Udemy Python3 + -Anwendung] 57. Decorator
Einführung in Python Hands On Teil 1
Data Scientist Training Course Kapitel 3 Tag 1 + 2
[Einführung in Python] So analysieren Sie JSON