Database containers

Allows to spin up database images such as MySQL, PostgreSQL, MariaDB, Oracle XE, MongoDb, ClickHouse, Neo4j or ArangoDB

class testcontainers.mysql.MySqlContainer(image='mysql:latest', MYSQL_USER=None, MYSQL_ROOT_PASSWORD=None, MYSQL_PASSWORD=None, MYSQL_DATABASE=None, **kwargs)

MySql database container.

Example

The example will spin up a MySql database to which you can connect with the credentials passed in the constructor. Alternatively, you may use the get_connection_url() method which returns a sqlalchemy-compatible url in format dialect+driver://username:password@host:port/database. .. doctest:

>>> import sqlalchemy
>>> from testcontainers.mysql import MySqlContainer

>>> with MySqlContainer('mysql:5.7.17') as mysql:
...     e = sqlalchemy.create_engine(mysql.get_connection_url())
...     result = e.execute("select version()")
...     version, = result.fetchone()
class testcontainers.mysql.MariaDbContainer(image='mariadb:latest', **kwargs)

Maria database container, a commercially-supported fork of MySql.

Example

with MariaDbContainer("mariadb:latest") as mariadb:
    e = sqlalchemy.create_engine(mariadb.get_connection_url())
    result = e.execute("select version()")
class testcontainers.postgres.PostgresContainer(image='postgres:latest', port=5432, user=None, password=None, dbname=None, driver='psycopg2', **kwargs)

Postgres database container.

Example

The example spins up a Postgres database and connects to it using the psycopg driver. .. doctest:

>>> from testcontainers.postgres import PostgresContainer
>>> import sqlalchemy

>>> postgres_container = PostgresContainer("postgres:9.5")
>>> with postgres_container as postgres:
...     e = sqlalchemy.create_engine(postgres.get_connection_url())
...     result = e.execute("select version()")
...     version, = result.fetchone()
>>> version
'PostgreSQL 9.5...'
class testcontainers.oracle.OracleDbContainer(image='wnameless/oracle-xe-11g-r2:latest', **kwargs)

Oracle database container.

Example

>>> import sqlalchemy
>>> from testcontainers.oracle import OracleDbContainer

>>> with OracleDbContainer() as oracle:
...     e = sqlalchemy.create_engine(oracle.get_connection_url())
...     result = e.execute("select * from V$VERSION")
class testcontainers.mongodb.MongoDbContainer(image: str = 'mongo:latest', port_to_expose: int = 27017, **kwargs)

Mongo document-based database container.

Example

>>> from testcontainers.mongodb import MongoDbContainer

>>> with MongoDbContainer("mongo:latest") as mongo:
...    db = mongo.get_connection_client().test
...    # Insert a database entry
...    result = db.restaurants.insert_one(
...        {
...            "address": {
...                "street": "2 Avenue",
...                "zipcode": "10075",
...                "building": "1480",
...                "coord": [-73.9557413, 40.7720266]
...            },
...            "borough": "Manhattan",
...            "cuisine": "Italian",
...            "name": "Vella",
...            "restaurant_id": "41704620"
...        }
...    )
...    # Find the restaurant document
...    cursor = db.restaurants.find({"borough": "Manhattan"})
class testcontainers.mssql.SqlServerContainer(image='mcr.microsoft.com/mssql/server:2019-latest', user='SA', password=None, port=1433, dbname='tempdb', dialect='mssql+pymssql', **kwargs)

Microsoft Sql Server database container.

Example

>>> import sqlalchemy
>>> from testcontainers.mssql import SqlServerContainer

>>> with SqlServerContainer() as mssql:
...    e = sqlalchemy.create_engine(mssql.get_connection_url())
...    result = e.execute("select @@VERSION")

Notes

Requires ODBC Driver 17 for SQL Server.

class testcontainers.clickhouse.ClickHouseContainer(image='clickhouse/clickhouse-server:latest', port=9000, user=None, password=None, dbname=None)

ClickHouse database container.

Example

The example spins up a ClickHouse database and connects to it using the clickhouse-driver.

>>> import clickhouse_driver
>>> from testcontainers.clickhouse import ClickHouseContainer

>>> with ClickHouseContainer("clickhouse/clickhouse-server:21.8") as clickhouse:
...     client = clickhouse_driver.Client.from_url(clickhouse.get_connection_url())
...     client.execute("select 'working'")
[('working',)]
class testcontainers.neo4j.Neo4jContainer(image='neo4j:latest', **kwargs)

Neo4j Graph Database (Standalone) database container.

Example

>>> from testcontainers.neo4j import Neo4jContainer

>>> with Neo4jContainer() as neo4j,                     neo4j.get_driver() as driver,                     driver.session() as session:
...     result = session.run("MATCH (n) RETURN n LIMIT 1")
...     record = result.single()
class testcontainers.arangodb.ArangoDbContainer(image: str = 'arangodb:latest', port_to_expose: int = 8529, arango_root_password: str = 'passwd', arango_no_auth: Optional[bool] = None, arango_random_root_password: Optional[bool] = None, **kwargs)

ArangoDB container.

Example

The example will spin up a ArangoDB container. You may use the get_connection_url() method which returns a arangoclient-compatible url in format scheme://host:port. As of now, only a single host is supported (over HTTP).

>>> from testcontainers.arangodb import ArangoDbContainer
>>> from arango import ArangoClient

>>> with ArangoDbContainer("arangodb:3.9.1") as arango:
...    client = ArangoClient(hosts=arango.get_connection_url())
...
...    # Connect
...    sys_db = client.db(username="root", password="passwd")
...
...    # Create a new database named "test".
...    sys_db.create_database("test")
True