#"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
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
#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']
#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
#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'}
Die am besten geeigneten Redis-Datentypen sind sortierte Mengen oder Zsets. --zset ist eine eindeutige Menge von Werten, aber jeder Wert hat auch einen schwebenden Bruch namens ** score **.
Ich habe nach dem Fehler 'str'object hat keine Attribut'items' gesucht, konnte ihn aber nicht beheben. Ich habe Folgendes getan, um das Problem zu beheben.
Als ich nachgesehen habe, habe ich auf einigen Websites festgestellt, dass der Fehler durch ein Upgrade der Setup-Tools behoben wurde.
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
>>> 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
>>> 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)
>>>
>>> test1="""This is a test of the emergency text system"""
>>> fout=open("text.txt","wt")
>>> fout.write(test1)
43
>>> fout.close()
>>> with open("text.txt","rt") as infile:
... test2=infile.read()
...
>>> test1==test2
True
>>> a="""auther,book
... J R R Tolkien,The Hobbit
... Lynne Truss,"Eats, Shoots & Leaves"
... """
>>> 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')])
>>> 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
>>> 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()
>>> 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()
#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!',)
>>> 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)
>>> 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!',)
>>>
#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'}
>>> conn.hincrby("test","count")
2
>>> conn.hget("test","count")
b'2'
Ich habe mehr gelernt und besser verstanden. Danach möchte ich mein Verständnis durch Dokumentation und Online-Recherche vertiefen.
"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