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 formatdialect+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 formatscheme://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