
Product
Secure Your AI-Generated Code with Socket MCP
Socket MCP brings real-time security checks to AI-generated code, helping developers catch risky dependencies before they enter the codebase.
CouchDB3 is a wrapper around the CouchDB API. For more detailed information, please refer to the documentation.
Big parts of the documentation (and thus docstrings) have been copied from CouchDB's API's great official documentation.
>= 3.7
3.x
Installing via PyPi
pip install couchdb3
Installing via Github
python -m pip install git+https://github.com/n-Vlahovic/couchdb3.git
Installing from source
git clone https://github.com/n-Vlahovic/couchdb3
python -m pip install -e couchdb3
import couchdb3
client = couchdb3.Server(
"http://user:password@127.0.0.1:5984"
)
# Checking if the server is up
print(client.up())
# True
user and password can also be passed into the Server constructor as keyword parameters, e.g.
client = couchdb3.Server(
"127.0.0.1:5984", # Scheme omitted - will assume http protocol
user="user",
password="password"
)
Both approaches are equivalent, i.e. in both cases the instance's scheme,host,port,user,password
will be identical.
Further, clients can be used with context managers:
with couchdb3.Server("http://user:password@127.0.0.1:5984") as client:
# Do stuff
...
dbname = "mydb"
db = client.get(dbname) if dbname in client else client.create(dbname)
print(db)
# Database: mydb
mydoc = {
"_id": "mydoc-id",
"name": "Hello",
"type": "World"
}
print(db.save(mydoc))
# ('mydoc-id', True, '1-24fa3b3fd2691da9649dd6abe3cafc7e')
Note: Database.save
requires the document to have an id (i.e. a key _id
),
Database.create
does not.
To update an existing document, retrieving the revision is paramount.
In the example below, dbdoc
contains the key _rev
and the builtin dict.update
function is used to update the
document before saving it.
mydoc = {
"_id": "mydoc-id",
"name": "Hello World",
"type": "Hello World"
}
dbdoc = db.get(mydoc["_id"])
dbdoc.update(mydoc)
print(db.save(dbdoc))
# ('mydoc-id', True, '2-374aa8f0236b9120242ca64935e2e8f1')
Alternatively, one can use Database.rev
to fetch the latest revision and overwrite the document
mydoc = {
"_id": "mydoc-id",
"_rev": db.rev("mydoc-id"),
"name": "Hello World",
"type": "Hello World"
}
print(db.save(mydoc))
# ('mydoc-id', True, '3-d56b14b7ffb87960b51d03269990a30d')
To delete a document, the docid
and rev
are needed
docid = "mydoc-id"
print(db.delete(docid=docid, rev=db.rev(docid))) # Fetch the revision on the go
# True
For a partitioned database, the couchdb3.database.Partition
class offers a wrapper around partitions (acting similarly
to collections in Mongo).
from couchdb3 import Server, Database, Partition
client: Server = Server(...)
db: Database = client["some-db"]
partition: Partition = db.get_partition("partition_id")
Partition instances append the partition's ID the document IDs (partition-id:doc-id
) for a simpler user interaction,
e.g.
doc_id = "test-id"
print(doc_id in partition) # no need to append the partition's ID
rev = partition.rev(doc_id)
partition.save({
"_id": doc_id, # no need to append the partition's ID
"_rev": rev,
...
})
The partition ID will only be appended provided document IDs do not start with partition-id
, e.g. the following will
work and be equivalent to the previous example
doc_id = "partition_id:test-id"
print(doc_id in partition)
rev = partition.rev(doc_id)
partition.save({
"_id": doc_id,
"_rev": rev,
...
})
FAQs
A wrapper around the CouchDB API.
We found that CouchDB3 demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Product
Socket MCP brings real-time security checks to AI-generated code, helping developers catch risky dependencies before they enter the codebase.
Security News
As vulnerability data bottlenecks grow, the federal government is formally investigating NIST’s handling of the National Vulnerability Database.
Research
Security News
Socket’s Threat Research Team has uncovered 60 npm packages using post-install scripts to silently exfiltrate hostnames, IP addresses, DNS servers, and user directories to a Discord-controlled endpoint.