tag:github.com,2008:https://github.com/questdb/py-questdb-client/releasesRelease notes from py-questdb-client2025-04-03T08:30:09Ztag:github.com,2008:Repository/503029222/v2.0.42025-04-03T12:53:43Zv2.0.4<h2>What's Changed</h2>
<ul>
<li>Wheels for Python 3.13.</li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/javier/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/javier">@javier</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2419223387" data-permission-text="Title is private" data-url="https://github.com/questdb/py-questdb-client/issues/92" data-hovercard-type="pull_request" data-hovercard-url="/questdb/py-questdb-client/pull/92/hovercard" href="https://github.com/questdb/py-questdb-client/pull/92">#92</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/likev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/likev">@likev</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2540079263" data-permission-text="Title is private" data-url="https://github.com/questdb/py-questdb-client/issues/94" data-hovercard-type="pull_request" data-hovercard-url="/questdb/py-questdb-client/pull/94/hovercard" href="https://github.com/questdb/py-questdb-client/pull/94">#94</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/nunnsy/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/nunnsy">@nunnsy</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2647648000" data-permission-text="Title is private" data-url="https://github.com/questdb/py-questdb-client/issues/95" data-hovercard-type="pull_request" data-hovercard-url="/questdb/py-questdb-client/pull/95/hovercard" href="https://github.com/questdb/py-questdb-client/pull/95">#95</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/questdb/py-questdb-client/compare/v2.0.3...v2.0.4"><tt>v2.0.3...v2.0.4</tt></a></p>jerrinottag:github.com,2008:Repository/503029222/v2.0.32024-06-07T09:59:31Z2.0.3<h2>What's Changed</h2>
<p>Patch release with bug fixes. No breaking changes.</p>
<h2>Bug fixes</h2>
<ul>
<li>HTTP timeout wasn't always being correctly applied in the downstream c-questdb-client dependency.</li>
<li>request_timeout > 0 is be enforced. This was always required, but would not error.</li>
<li>Fixed the source distribution "sdist" package: This allows the package to be installed from source via "pip install" on previously unsupported platforms (YMMV).</li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/questdb/py-questdb-client/compare/v2.0.2...v2.0.3"><tt>v2.0.2...v2.0.3</tt></a></p>jerrinottag:github.com,2008:Repository/503029222/v2.0.22024-04-11T16:42:38Z2.0.2<h2>What's Changed</h2>
<p>Patch release with performance bug fix. No breaking changes.</p>
<h2>Bug fixes</h2>
<ul>
<li>Fixed the defaulting logic for <code>auto_flush_rows</code> parameter for HTTPS.<br>
It is now correctly set to 75000 rows by default. The old incorrect default<br>
of 600 rows was causing the sender to flush too often, impacting performance.<br>
Note that TCP, TCPS and HTTP were not affected.</li>
</ul>
<h2>Features</h2>
<ul>
<li>The sender now exposes the <code>auto_flush</code> settings as read-only properties.<br>
You can inspect the values in use with <code>.auto_flush</code>, <code>.auto_flush_rows</code>,<br>
<code>.auto_flush_interval</code> and <code>.auto_flush_bytes</code>.</li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/questdb/py-questdb-client/compare/v2.0.1...v2.0.2"><tt>v2.0.1...v2.0.2</tt></a></p>amunratag:github.com,2008:Repository/503029222/v2.0.12024-04-04T14:32:02Z2.0.1<h2>What's Changed</h2>
<p>This is a patch release with bug fixes, no API changes and some documentation tweaks.</p>
<h2>Bug fixes</h2>
<ul>
<li>Fixed a bug where an internal "last flushed" timestamp used by <code>auto_flush_interval</code> wasn't updated correctly causing the auto-flush logic to trigger after each row.</li>
<li>Removed two unnecessary debugging <code>print()</code> statements that were accidentally left in the code in <code>Sender.from_conf()</code> and<br>
<code>Sender.from_env()</code>.</li>
</ul>
<h2>Improvements</h2>
<ul>
<li>Introduced the ability to optionally install <code>pandas</code> and <code>pyarrow</code> via <code>python3 -m pip install -U questdb[dataframe]</code> and updated the documentation to reflect this.</li>
</ul>jerrinottag:github.com,2008:Repository/503029222/v2.0.02024-03-22T18:00:10Z2.0.0<h2>What's Changed</h2>
<p>This is a major release with new features and breaking changes.</p>
<h2>Features</h2>
<ul>
<li>
<p>Support for ILP over HTTP. The sender can now send data to QuestDB via HTTP instead of TCP. This provides error feedback from the server and new features.</p>
<div class="highlight highlight-source-python notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="conf = 'http::addr=localhost:9000;'
with Sender.from_conf(conf) as sender:
sender.row(...)
sender.dataframe(...)
# Will raise `IngressError` if there is an error from the server.
sender.flush()"><pre><span class="pl-s1">conf</span> <span class="pl-c1">=</span> <span class="pl-s">'http::addr=localhost:9000;'</span>
<span class="pl-k">with</span> <span class="pl-v">Sender</span>.<span class="pl-c1">from_conf</span>(<span class="pl-s1">conf</span>) <span class="pl-k">as</span> <span class="pl-s1">sender</span>:
<span class="pl-s1">sender</span>.<span class="pl-c1">row</span>(...)
<span class="pl-s1">sender</span>.<span class="pl-c1">dataframe</span>(...)
<span class="pl-c"># Will raise `IngressError` if there is an error from the server.</span>
<span class="pl-s1">sender</span>.<span class="pl-c1">flush</span>()</pre></div>
</li>
<li>
<p>New configuration string construction. The sender can now be also constructed from a configuration string in addition to the constructor arguments. This allows for more flexible configuration and is the recommended way to construct a sender. The same string can also be loaded from the <code>QDB_CLIENT_CONF</code> environment variable. The constructor arguments have been updated and some options have changed.</p>
</li>
<li>
<p>Explicit transaction support over HTTP. A set of rows for a single table can now be committed via the sender transactionally. You can do this using a <code>with sender.transaction('table_name') as txn:</code> block.</p>
<div class="highlight highlight-source-python notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="conf = 'http::addr=localhost:9000;'
with Sender.from_conf(conf) as sender:
with sender.transaction('test_table') as txn:
# Same arguments as the sender methods, minus the table name.
txn.row(...)
txn.dataframe(...)"><pre><span class="pl-s1">conf</span> <span class="pl-c1">=</span> <span class="pl-s">'http::addr=localhost:9000;'</span>
<span class="pl-k">with</span> <span class="pl-v">Sender</span>.<span class="pl-c1">from_conf</span>(<span class="pl-s1">conf</span>) <span class="pl-k">as</span> <span class="pl-s1">sender</span>:
<span class="pl-k">with</span> <span class="pl-s1">sender</span>.<span class="pl-c1">transaction</span>(<span class="pl-s">'test_table'</span>) <span class="pl-k">as</span> <span class="pl-s1">txn</span>:
<span class="pl-c"># Same arguments as the sender methods, minus the table name.</span>
<span class="pl-s1">txn</span>.<span class="pl-c1">row</span>(...)
<span class="pl-s1">txn</span>.<span class="pl-c1">dataframe</span>(...)</pre></div>
</li>
<li>
<p>A number of documentation improvements.</p>
</li>
</ul>
<h2>Breaking Changes</h2>
<ul>
<li>
<p>New <code>protocol</code> parameter in the Sender constructor. In the previous version, the protocol was always TCP. In this new version, you must specify the protocol explicitly.</p>
</li>
<li>
<p>New auto-flush defaults. In previous versions, auto-flushing was enabled by default and triggered by a maximum buffer size. In this new version, auto-flushing is enabled by row count (600 rows by default) and interval (1 second by default), while auto-flushing by buffer size is disabled by default.</p>
<p>The old behavior can still be achieved by tweaking the auto-flush settings.</p>
<table>
<thead>
<tr>
<th>Setting</th>
<th>Old default</th>
<th>New default</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>auto_flush_rows</strong></td>
<td>off</td>
<td>600</td>
</tr>
<tr>
<td><strong>auto_flush_interval</strong></td>
<td>off</td>
<td>1000</td>
</tr>
<tr>
<td><strong>auto_flush_bytes</strong></td>
<td>64512</td>
<td>off</td>
</tr>
</tbody>
</table>
</li>
<li>
<p>The <code>at=..</code> argument of the <code>row</code> and <code>dataframe</code> methods is now mandatory. Omitting it would previously use a server-generated timestamp for the row. Now, if you want a server-generated timestamp, you can pass the <code>ServerTimestamp</code> singleton to this parameter. <em>The <code>ServerTimestamp</code> behavior is considered legacy.</em></p>
</li>
<li>
<p>The <code>auth=(u, t, x, y)</code> argument of the <code>Sender</code> constructor has now been broken up into multiple arguments: <code>username</code>, <code>token</code>, <code>token_x</code>, <code>token_y</code>.</p>
</li>
<li>
<p>The <code>tls</code> argument of the <code>Sender</code> constructor has been removed and replaced with the <code>protocol</code> argument. Use <code>Protocol.Tcps</code> (or <code>Protocol.Https</code>) to enable TLS. The <code>tls</code> values have been moved to new <code>tls_ca</code> and <code>tls_roots</code> configuration settings.</p>
</li>
<li>
<p>The <code>net_interface</code> argument of the <code>Sender</code> constructor has been renamed to <code>bind_interface</code> and is now only available for TCP connections.</p>
</li>
</ul>
<p>The following example shows how to migrate to the new API.</p>
<p><strong>Old questdb 1.x code</strong></p>
<div class="highlight highlight-source-python notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="from questdb.ingress import Sender
auth = (
'testUser1',
'5UjEMuA0Pj5pjK8a-fa24dyIf-Es5mYny3oE_Wmus48',
'token_x=fLKYEaoEb9lrn3nkwLDA-M_xnuFOdSt9y0Z7_vWSHLU',
'token_y=Dt5tbS1dEDMSYfym3fgMv0B99szno-dFc1rYF9t0aac')
with Sender('localhost', 9009, auth=auth, tls=True) as sender:
sender.row(
'test_table',
symbols={'sym': 'AAPL'},
columns={'price': 100.0}) # `at=None` was defaulted for server time"><pre><span class="pl-k">from</span> <span class="pl-s1">questdb</span>.<span class="pl-s1">ingress</span> <span class="pl-k">import</span> <span class="pl-v">Sender</span>
<span class="pl-s1">auth</span> <span class="pl-c1">=</span> (
<span class="pl-s">'testUser1'</span>,
<span class="pl-s">'5UjEMuA0Pj5pjK8a-fa24dyIf-Es5mYny3oE_Wmus48'</span>,
<span class="pl-s">'token_x=fLKYEaoEb9lrn3nkwLDA-M_xnuFOdSt9y0Z7_vWSHLU'</span>,
<span class="pl-s">'token_y=Dt5tbS1dEDMSYfym3fgMv0B99szno-dFc1rYF9t0aac'</span>)
<span class="pl-k">with</span> <span class="pl-en">Sender</span>(<span class="pl-s">'localhost'</span>, <span class="pl-c1">9009</span>, <span class="pl-s1">auth</span><span class="pl-c1">=</span><span class="pl-s1">auth</span>, <span class="pl-s1">tls</span><span class="pl-c1">=</span><span class="pl-c1">True</span>) <span class="pl-k">as</span> <span class="pl-s1">sender</span>:
<span class="pl-s1">sender</span>.<span class="pl-c1">row</span>(
<span class="pl-s">'test_table'</span>,
<span class="pl-s1">symbols</span><span class="pl-c1">=</span>{<span class="pl-s">'sym'</span>: <span class="pl-s">'AAPL'</span>},
<span class="pl-s1">columns</span><span class="pl-c1">=</span>{<span class="pl-s">'price'</span>: <span class="pl-c1">100.0</span>}) <span class="pl-c"># `at=None` was defaulted for server time</span></pre></div>
<p><strong>Equivalent questdb 2.x code</strong></p>
<div class="highlight highlight-source-python notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="from questdb.ingress import Sender, Protocol, ServerTimestamp
sender = Sender(
Protocol.Tcps,
'localhost',
9009,
username='testUser1',
token='5UjEMuA0Pj5pjK8a-fa24dyIf-Es5mYny3oE_Wmus48',
token_x='token_x=fLKYEaoEb9lrn3nkwLDA-M_xnuFOdSt9y0Z7_vWSHLU',
token_y='token_y=Dt5tbS1dEDMSYfym3fgMv0B99szno-dFc1rYF9t0aac',
auto_flush_rows='off',
auto_flush_interval='off',
auto_flush_bytes=64512)
with sender:
sender.row(
'test_table',
symbols={'sym': 'AAPL'},
columns={'price': 100.0},
at=ServerTimestamp)"><pre><span class="pl-k">from</span> <span class="pl-s1">questdb</span>.<span class="pl-s1">ingress</span> <span class="pl-k">import</span> <span class="pl-v">Sender</span>, <span class="pl-v">Protocol</span>, <span class="pl-v">ServerTimestamp</span>
<span class="pl-s1">sender</span> <span class="pl-c1">=</span> <span class="pl-en">Sender</span>(
<span class="pl-v">Protocol</span>.<span class="pl-c1">Tcps</span>,
<span class="pl-s">'localhost'</span>,
<span class="pl-c1">9009</span>,
<span class="pl-s1">username</span><span class="pl-c1">=</span><span class="pl-s">'testUser1'</span>,
<span class="pl-s1">token</span><span class="pl-c1">=</span><span class="pl-s">'5UjEMuA0Pj5pjK8a-fa24dyIf-Es5mYny3oE_Wmus48'</span>,
<span class="pl-s1">token_x</span><span class="pl-c1">=</span><span class="pl-s">'token_x=fLKYEaoEb9lrn3nkwLDA-M_xnuFOdSt9y0Z7_vWSHLU'</span>,
<span class="pl-s1">token_y</span><span class="pl-c1">=</span><span class="pl-s">'token_y=Dt5tbS1dEDMSYfym3fgMv0B99szno-dFc1rYF9t0aac'</span>,
<span class="pl-s1">auto_flush_rows</span><span class="pl-c1">=</span><span class="pl-s">'off'</span>,
<span class="pl-s1">auto_flush_interval</span><span class="pl-c1">=</span><span class="pl-s">'off'</span>,
<span class="pl-s1">auto_flush_bytes</span><span class="pl-c1">=</span><span class="pl-c1">64512</span>)
<span class="pl-k">with</span> <span class="pl-s1">sender</span>:
<span class="pl-s1">sender</span>.<span class="pl-c1">row</span>(
<span class="pl-s">'test_table'</span>,
<span class="pl-s1">symbols</span><span class="pl-c1">=</span>{<span class="pl-s">'sym'</span>: <span class="pl-s">'AAPL'</span>},
<span class="pl-s1">columns</span><span class="pl-c1">=</span>{<span class="pl-s">'price'</span>: <span class="pl-c1">100.0</span>},
<span class="pl-s1">at</span><span class="pl-c1">=</span><span class="pl-v">ServerTimestamp</span>)</pre></div>
<p><strong>Equivalent questdb 2.x code with configuration string</strong></p>
<div class="highlight highlight-source-python notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="from questdb.ingress import Sender, ServerTimestamp
conf = (
'tcp::addr=localhost:9009;' +
'username=testUser1;' +
'token=5UjEMuA0Pj5pjK8a-fa24dyIf-Es5mYny3oE_Wmus48;' +
'token_x=token_x=fLKYEaoEb9lrn3nkwLDA-M_xnuFOdSt9y0Z7_vWSHLU;' +
'token_y=token_y=Dt5tbS1dEDMSYfym3fgMv0B99szno-dFc1rYF9t0aac;' +
'auto_flush_rows=off;' +
'auto_flush_interval=off;' +
'auto_flush_bytes=64512;')
with Sender.from_conf(conf) as sender:
sender.row(
'test_table',
symbols={'sym': 'AAPL'},
columns={'price': 100.0},
at=ServerTimestamp)"><pre><span class="pl-k">from</span> <span class="pl-s1">questdb</span>.<span class="pl-s1">ingress</span> <span class="pl-k">import</span> <span class="pl-v">Sender</span>, <span class="pl-v">ServerTimestamp</span>
<span class="pl-s1">conf</span> <span class="pl-c1">=</span> (
<span class="pl-s">'tcp::addr=localhost:9009;'</span> <span class="pl-c1">+</span>
<span class="pl-s">'username=testUser1;'</span> <span class="pl-c1">+</span>
<span class="pl-s">'token=5UjEMuA0Pj5pjK8a-fa24dyIf-Es5mYny3oE_Wmus48;'</span> <span class="pl-c1">+</span>
<span class="pl-s">'token_x=token_x=fLKYEaoEb9lrn3nkwLDA-M_xnuFOdSt9y0Z7_vWSHLU;'</span> <span class="pl-c1">+</span>
<span class="pl-s">'token_y=token_y=Dt5tbS1dEDMSYfym3fgMv0B99szno-dFc1rYF9t0aac;'</span> <span class="pl-c1">+</span>
<span class="pl-s">'auto_flush_rows=off;'</span> <span class="pl-c1">+</span>
<span class="pl-s">'auto_flush_interval=off;'</span> <span class="pl-c1">+</span>
<span class="pl-s">'auto_flush_bytes=64512;'</span>)
<span class="pl-k">with</span> <span class="pl-v">Sender</span>.<span class="pl-c1">from_conf</span>(<span class="pl-s1">conf</span>) <span class="pl-k">as</span> <span class="pl-s1">sender</span>:
<span class="pl-s1">sender</span>.<span class="pl-c1">row</span>(
<span class="pl-s">'test_table'</span>,
<span class="pl-s1">symbols</span><span class="pl-c1">=</span>{<span class="pl-s">'sym'</span>: <span class="pl-s">'AAPL'</span>},
<span class="pl-s1">columns</span><span class="pl-c1">=</span>{<span class="pl-s">'price'</span>: <span class="pl-c1">100.0</span>},
<span class="pl-s1">at</span><span class="pl-c1">=</span><span class="pl-v">ServerTimestamp</span>)</pre></div>amunratag:github.com,2008:Repository/503029222/v1.2.02023-11-23T12:47:33Z1.2.0<h2>What's Changed</h2>
<p>This is a minor release bringing in minor new features and a few bug fixes, without any breaking changes.<br>
Most changes are inherited by internally upgrading to version <code>3.1.0</code> of the <code>c-questdb-client</code>.</p>
<h2>Features</h2>
<ul>
<li><code>Sender(..., tls=True)</code> now also uses OS-provided certificate store. The <code>tls</code> argument can now also be set to <code>tls='os_roots'</code> (to <em>only</em> use the OS-provided certs) or <code>tls='webpki_roots'</code> (to <em>only</em> use the certs provided by the <code>webpki-roots</code>, i.e. the old behaviour prior to this release). The new default behaviour for <code>tls=True</code> is equivalent to setting <code>tls='webpki_and_os_roots'</code>.</li>
<li>Upgraded dependencies to newer library versions. This also includes the latest <a href="https://github.com/rustls/webpki-roots"><code>webpki-roots</code></a> crate providing updated TLS CA certificate roots.</li>
<li>Various example code and documentation improvements.</li>
</ul>
<h2>Bug fixes</h2>
<ul>
<li>Fixed a bug where timestamp columns could not accept values before Jan 1st 1970 UTC.</li>
<li>TCP connections now enable <code>SO_KEEPALIVE</code>: This should ensure that connections don't drop after a period of inactivity.</li>
</ul>
<h2>Supported Python Versions</h2>
<ul>
<li>Now supports Python 3.12</li>
<li>Drops support for Python 3.7</li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/questdb/py-questdb-client/compare/v1.1.0...v1.2.0"><tt>v1.1.0...v1.2.0</tt></a></p>amunratag:github.com,2008:Repository/503029222/v1.1.02023-01-04T18:17:35Z1.1.0<h2>What's Changed</h2>
<h3>Features</h3>
<ul>
<li>
<p>High-performance ingestion of <a href="https://pandas.pydata.org/" rel="nofollow">Pandas</a> dataframes into QuestDB via ILP. We now support most Pandas column types. The logic is implemented in native code and is orders of magnitude faster than iterating the dataframe in Python and calling the <code>Buffer.row()</code> or <code>Sender.row()</code> methods: The <code>Buffer</code> can be written from Pandas at hundreds of MiB/s per CPU core. The new <code>dataframe()</code> method continues working with the <code>auto_flush</code> feature. See API documentation and examples for the new <code>dataframe()</code> method available on both the <code>Sender</code> and <code>Buffer</code> classes.</p>
</li>
<li>
<p>New <code>TimestampNanos.now()</code> and <code>TimestampMicros.now()</code> methods. <em>These are the new recommended way of getting the current timestamp.</em></p>
</li>
<li>
<p>The Python GIL is now released during calls to <code>Sender.flush()</code> and when <code>auto_flush</code> is triggered. This should improve throughput when using the <code>Sender</code> from multiple threads.</p>
</li>
</ul>
<h3>Errata</h3>
<ul>
<li>In previous releases the documentation for the <code>from_datetime()</code> methods of the <code>TimestampNanos</code> and <code>TimestampMicros</code> types recommended calling <code>datetime.datetime.utcnow()</code> to get the current timestamp. This is incorrect as it will (confusingly) return object with the local timezone instead of UTC. This documentation has been corrected and now recommends calling <code>datetime.datetime.now(tz=datetime.timezone.utc)</code> or (more efficiently) the new <code>TimestampNanos.now()</code> and <code>TimestampMicros.now()</code> methods.</li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/questdb/py-questdb-client/compare/v1.0.2...v1.1.0"><tt>v1.0.2...v1.1.0</tt></a></p>amunratag:github.com,2008:Repository/503029222/v1.0.22022-10-31T21:13:47Z1.0.2<ul>
<li>Support for Python 3.11.</li>
<li>Updated to version 2.1.1 of the <code>c-questdb-client</code> library:
<ul>
<li>Setting <code>SO_REUSEADDR</code> on outbound socket. This is helpful to users with large number of connections who previously ran out of outbound network ports.</li>
</ul>
</li>
</ul>amunratag:github.com,2008:Repository/503029222/v1.0.12022-08-16T21:00:21Z1.0.1<ul>
<li>Fixed a major bug where Python <code>int</code> and <code>float</code> types were handled with 32-bit instead of 64-bit precision. This caused certain <code>int</code> values to be rejected and other <code>float</code> values to be rounded incorrectly. Closes <a href="https://github.com/questdb/py-questdb-client/issues/13" data-hovercard-type="issue" data-hovercard-url="/questdb/py-questdb-client/issues/13/hovercard">#13</a>.</li>
<li>As a matter of convenience, the <code>Buffer.row</code> method can now take <code>None</code> column values. This has the same semantics as skipping the column altogether. Closes <a href="https://github.com/questdb/py-questdb-client/issues/3" data-hovercard-type="issue" data-hovercard-url="/questdb/py-questdb-client/issues/3/hovercard">#3</a>.</li>
<li>Fixed a minor bug where an auto-flush error caused a second clean-up error. Closes <a href="https://github.com/questdb/py-questdb-client/issues/4" data-hovercard-type="issue" data-hovercard-url="/questdb/py-questdb-client/issues/4/hovercard">#4</a>.</li>
</ul>amunratag:github.com,2008:Repository/503029222/v1.0.02022-07-15T16:45:37Zv1.0.0<p>Bump version: 0.0.3 → 1.0.0</p>amunra