|
1 | 1 | Database containers
|
2 | 2 | ===================
|
3 | 3 |
|
4 |
| -Allows to spin up docker database images such as MySQL, PostgreSQL, MariaDB, Oracle XE and MongoDb. |
5 |
| - |
6 |
| -MySQL example |
7 |
| -------------- |
8 |
| - |
9 |
| -:: |
10 |
| - |
11 |
| - def test_docker_run_mysql(): |
12 |
| - config = MySqlContainer('mysql:5.7.17') |
13 |
| - with config as mysql: |
14 |
| - e = sqlalchemy.create_engine(mysql.get_connection_url()) |
15 |
| - result = e.execute("select version()") |
16 |
| - |
17 |
| -It will spin up MySQL version 5.7. Then you can connect to database with credentials passed in constructor or just |
18 |
| - |
19 |
| -call ``get_connection_url()`` method which returns sqlalchemy compatible url in format ``dialect+driver://username:password@host:port/database``. |
20 |
| - |
21 |
| -PostgresSQL |
22 |
| ------------ |
23 |
| - |
24 |
| -Example of PostgresSQL database usage: |
25 |
| - |
26 |
| -:: |
27 |
| - |
28 |
| - def test_docker_run_postgress(): |
29 |
| - postgres_container = PostgresContainer("postgres:9.5") |
30 |
| - with postgres_container as postgres: |
31 |
| - e = sqlalchemy.create_engine(postgres.get_connection_url()) |
32 |
| - result = e.execute("select version()") |
33 |
| - |
34 |
| -Connection set by using raw python ``psycopg2`` driver for Postgres. |
35 |
| - |
36 |
| -MariaDB |
37 |
| -------- |
38 |
| - |
39 |
| -Maria DB is a fork of MySQL database, so the only difference with MySQL is the name of Docker container. |
40 |
| - |
41 |
| -:: |
42 |
| - |
43 |
| - def test_docker_run_mariadb(): |
44 |
| - mariadb_container = MariaDbContainer("mariadb:latest") |
45 |
| - with mariadb_container as mariadb: |
46 |
| - e = sqlalchemy.create_engine(mariadb.get_connection_url()) |
47 |
| - result = e.execute("select version()") |
48 |
| - |
49 |
| -Oracle XE |
50 |
| ---------- |
51 |
| - |
52 |
| -:: |
53 |
| - |
54 |
| - oracle = OracleDbContainer() |
55 |
| - |
56 |
| - with oracle: |
57 |
| - e = sqlalchemy.create_engine(oracle.get_connection_url()) |
58 |
| - result = e.execute("select 1 from dual") |
59 |
| - |
60 |
| -It uses **https://hub.docker.com/r/wnameless/oracle-xe-11g-r2/** docker image. |
61 |
| - |
62 |
| -Necessary to use it: |
63 |
| - |
64 |
| -- ``cx_Oracle`` |
65 |
| -- `Oracle client libraries <https://cx-oracle.readthedocs.io/en/latest/user_guide/installation.html>`_ |
66 |
| - |
67 |
| -:: |
68 |
| - |
69 |
| - hostname: localhost |
70 |
| - port: 49161 |
71 |
| - sid: xe |
72 |
| - username: system |
73 |
| - password: oracle |
74 |
| - |
75 |
| -Elasticsearch |
76 |
| -------------- |
77 |
| - |
78 |
| -:: |
79 |
| - |
80 |
| - es = ElasticSearchContainer() |
81 |
| - with es: |
82 |
| - es.get_url() # gives you the http URL to connect to Elasticsearch |
83 |
| - |
84 |
| -MongoDb |
85 |
| ------------ |
86 |
| - |
87 |
| -Example of MongoDb database usage: |
88 |
| - |
89 |
| -:: |
90 |
| - |
91 |
| - def test_docker_run_mongodb(): |
92 |
| - mongo_container = MongoDbContainer("mongo:latest") |
93 |
| - with mongo_container as mongo: |
94 |
| - db = mongo.get_connection_client().test |
95 |
| - result = db.restaurants.insert_one( |
96 |
| - { |
97 |
| - "address": { |
98 |
| - "street": "2 Avenue", |
99 |
| - "zipcode": "10075", |
100 |
| - "building": "1480", |
101 |
| - "coord": [-73.9557413, 40.7720266] |
102 |
| - }, |
103 |
| - "borough": "Manhattan", |
104 |
| - "cuisine": "Italian", |
105 |
| - "name": "Vella", |
106 |
| - "restaurant_id": "41704620" |
107 |
| - } |
108 |
| - ) |
109 |
| - print(result.inserted_id) |
110 |
| - cursor = db.restaurants.find({"borough": "Manhattan"}) |
111 |
| - for document in cursor: |
112 |
| - print(document) |
113 |
| - |
114 |
| -Connection is made using pymongo package and MongoClient class. |
115 |
| -Alternatively, you can use get_connection_url method to use the driver that better fits for your use case. |
116 |
| - |
117 |
| -Microsoft SQL Server |
118 |
| --------------------- |
119 |
| - |
120 |
| -:: |
121 |
| - |
122 |
| - mssql = SqlServerContainer() |
123 |
| - |
124 |
| - with mssql: |
125 |
| - e = sqlalchemy.create_engine(mssql.get_connection_url()) |
126 |
| - result = e.execute("select @@VERSION") |
127 |
| - |
128 |
| -It uses the Microsoft-provided Docker image and requires `ODBC Driver 17 for SQL Server |
129 |
| -<https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server>`_. |
| 4 | +Allows to spin up database images such as MySQL, PostgreSQL, MariaDB, Oracle XE, or MongoDb. |
| 5 | + |
| 6 | +.. autoclass:: testcontainers.mysql.MySqlContainer |
| 7 | +.. autoclass:: testcontainers.mysql.MariaDbContainer |
| 8 | +.. autoclass:: testcontainers.postgres.PostgresContainer |
| 9 | +.. autoclass:: testcontainers.oracle.OracleDbContainer |
| 10 | +.. autoclass:: testcontainers.elasticsearch.ElasticSearchContainer |
| 11 | +.. autoclass:: testcontainers.mongodb.MongoDbContainer |
| 12 | +.. autoclass:: testcontainers.mssql.SqlServerContainer |
0 commit comments