Administración de una base de datos de MongoDB mediante Python
SE APLICA A: MongoDB
El servidor de MongoDB en Azure Cosmos DB está disponible en los paquetes comunes de Python para MongoDB como:
- PyMongo para aplicaciones sincrónicas de Python. Se usa en este artículo.
- Motor para aplicaciones asincrónicas de Python.
Nota
Los fragmentos de código de ejemplo están disponibles en GitHub como un proyecto de Python.
Asignación de nombre a una base de datos
En Azure Cosmos DB, una base de datos es análoga a un espacio de nombres. Al crear una base de datos, el nombre de la base de datos forma un segmento del URI utilizado para acceder al recurso de base de datos y a los recursos secundarios.
Estas son algunas reglas rápidas de la asignación de un nombre a una base de datos:
Una vez creado, el URI de una base de datos tiene este formato:
https://<cosmos-account-name>.documents.azure.com/dbs/<database-name>
Obtención de una instancia de base de datos
La base de datos contiene las colecciones y sus documentos. Para acceder a una base de datos, use el acceso de estilo de atributo o el acceso de estilo de diccionario de MongoClient. Para obtener más información, consulte Obtención de una base de datos.
En los fragmentos de código siguientes se supone que ya ha creado la conexión cliente y que cierra dicha conexión después de estos fragmentos de código.
Obtención de información del servidor
Acceda a la información del servidor con el método server_info de la clase MongoClient. No es necesario especificar el nombre de la base de datos para obtener esta información. La información devuelta es específica de MongoDB y no representa la propia plataforma Azure Cosmos DB.
También puede enumerar las bases de datos mediante el método MongoClient.list_database_names y emitir un comando de MongoDB a una base de datos con el método MongoClient.db.command.
# Get server information
for k, v in client.server_info().items():
print("Key: {} , Value: {}".format(k, v))
# Get server status of admin database
print("Server status {}".format(client.admin.command("serverStatus")))
# List databases
databases = client.list_database_names()
print("Databases: {}".format(databases))
El fragmento de código anterior muestra una salida similar a la de la consola de ejemplo siguiente:
Key: version , Value: 3.6.0
Key: versionArray , Value: [3, 6, 0, 0]
Key: bits , Value: 64
Key: maxBsonObjectSize , Value: 16777216
Key: ok , Value: 1.0
Server status {'ok': 1.0}
Databases: ['adventureworks']
¿Existe la base de datos?
El controlador de PyMongo para Python crea una base de datos si no existe al obtener acceso. Aun así, se recomienda usar los comandos de extensión de MongoDB para administrar los datos almacenados en la API de Azure Cosmos DB para MongoDB. Para crear una base de datos si no existe, use la extensión de creación de base de datos como se muestra en el siguiente fragmento de código.
Para ver si la base de datos ya existe antes de usarla, obtenga la lista de bases de datos actuales con el método list_database_names.
# Get list of databases
databases = client.list_database_names()
if not databases:
print("No databases found")
# Does database exist?
DB_NAME = "adventureworks"
if DB_NAME in databases:
print("Database exists: {}".format(DB_NAME))
else:
client[DB_NAME].command(
{"customAction": "CreateDatabase", "offerThroughput": 400}
)
print("Created db '{}' with shared throughput.\n".format(DB_NAME))
El fragmento de código anterior muestra una salida similar a la de la consola de ejemplo siguiente:
Database exists: adventureworks
Obtención de una lista de bases de datos, colecciones y un recuento de documentos
Al administrar el servidor de MongoDB mediante programación, resulta útil saber qué bases de datos y colecciones hay en el servidor y cuántos documentos hay en cada colección. Para más información, consulte:
# Get list of databases
databases = client.list_database_names()
# Loop through databases
for db in databases:
print("Database: {}".format(db))
# Get list of collections
collections = client[db].list_collection_names()
# Loop through collections
for col in collections:
print("\tCollection: {}".format(col))
# Get document count
doc_count = client[db][col].count_documents({})
print("\tDocument count: {}".format(doc_count))
El fragmento de código anterior muestra una salida similar a la de la consola de ejemplo siguiente:
Database: adventureworks
Collection: products_new
Document count: 1
Collection: products
Document count: 3
Database: testdb
Collection: mycoll
Document count: 1
Obtención de una instancia de objeto de base de datos
Si una base de datos no existe, el controlador de PyMongo para Python la creará al obtener acceso. Aun así, se recomienda usar los comandos de extensión de MongoDB para administrar los datos almacenados en la API de Azure Cosmos DB para MongoDB. El patrón se muestra anteriormente en la sección ¿Existe la base de datos?
Al trabajar con PyMongo, se accede a las bases de datos mediante el acceso de estilo de atributo en las instancias de MongoClient. Cuando tenga una instancia de base de datos, podrá usar las operaciones de nivel de base de datos, como se muestra a continuación.
collections = client[db].list_collection_names()
Para obtener información general sobre cómo trabajar con bases de datos mediante el controlador de PyMongo, consulte Operaciones de nivel de base de datos.
Quitar una base de datos
Para quitar una base de datos del servidor, se usa el método drop_database de MongoClient.
DB_NAME = input("Enter database name to drop: ")
if DB_NAME in client.list_database_names():
print("Dropping database: {}".format(DB_NAME))
client.drop_database(DB_NAME)
else:
print("Didn't find database: {}".format(DB_NAME))
El fragmento de código anterior muestra una salida similar a la de la consola de ejemplo siguiente:
Enter database name to drop: adventureworks
Dropping database: adventureworks