Skip to content

Commit 07f656a

Browse files
committed
Deploying to master from @ psycopg/psycopg-website@e879ef3 🚀
1 parent dc0eeff commit 07f656a

File tree

39 files changed

+577
-577
lines changed

39 files changed

+577
-577
lines changed

articles.xml

+55-55
Large diffs are not rendered by default.

articles/2010/10/22/passing-connections-functions-using-decorator/index.html

+3-3
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ <h1>Passing connections to functions using a decorator</h1>
8080
<p>In many script I write, there are functions requiring database operations. Every time I need them, I try to write such code in functions like:</p>
8181
<pre class="code python literal-block">
8282
<span class="nd">&#64;with_connection</span><span class="w">
83-
</span><span class="k">def</span> <span class="nf">do_some_job</span><span class="p">(</span><span class="n">cnn</span><span class="p">,</span> <span class="n">arg1</span><span class="p">,</span> <span class="n">arg2</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span><span class="w">
83+
</span><span class="k">def</span><span class="w"> </span><span class="nf">do_some_job</span><span class="p">(</span><span class="n">cnn</span><span class="p">,</span> <span class="n">arg1</span><span class="p">,</span> <span class="n">arg2</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span><span class="w">
8484
</span> <span class="n">cur</span> <span class="o">=</span> <span class="n">cnn</span><span class="o">.</span><span class="n">cursor</span><span class="p">()</span><span class="w">
8585
</span> <span class="n">cur</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">SQL</span><span class="p">,</span> <span class="p">(</span><span class="n">arg1</span><span class="p">,</span> <span class="n">arg2</span><span class="p">))</span> <span class="c1"># or something else</span><span class="w">
8686

@@ -95,8 +95,8 @@ <h1>Passing connections to functions using a decorator</h1>
9595
</ul>
9696
<p>Implementation of such a decorator is straightforward, but because of the many possible variation it never made its way into a proper library. It goes something like:</p>
9797
<pre class="code python literal-block">
98-
<span class="k">def</span> <span class="nf">with_connection</span><span class="p">(</span><span class="n">f</span><span class="p">):</span><span class="w">
99-
</span> <span class="k">def</span> <span class="nf">with_connection_</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span><span class="w">
98+
<span class="k">def</span><span class="w"> </span><span class="nf">with_connection</span><span class="p">(</span><span class="n">f</span><span class="p">):</span><span class="w">
99+
</span> <span class="k">def</span><span class="w"> </span><span class="nf">with_connection_</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span><span class="w">
100100
</span> <span class="c1"># or use a pool, or a factory function...</span><span class="w">
101101
</span> <span class="n">cnn</span> <span class="o">=</span> <span class="n">psycopg</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">DSN</span><span class="p">)</span><span class="w">
102102
</span> <span class="k">try</span><span class="p">:</span><span class="w">

articles/2010/10/index.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ <h2><a href="/articles/2010/10/22/passing-connections-functions-using-decorator/
115115
<p>In many script I write, there are functions requiring database operations. Every time I need them, I try to write such code in functions like:</p>
116116
<pre class="code python literal-block">
117117
<span class="nd">&#64;with_connection</span><span class="w">
118-
</span><span class="k">def</span> <span class="nf">do_some_job</span><span class="p">(</span><span class="n">cnn</span><span class="p">,</span> <span class="n">arg1</span><span class="p">,</span> <span class="n">arg2</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span><span class="w">
118+
</span><span class="k">def</span><span class="w"> </span><span class="nf">do_some_job</span><span class="p">(</span><span class="n">cnn</span><span class="p">,</span> <span class="n">arg1</span><span class="p">,</span> <span class="n">arg2</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span><span class="w">
119119
</span> <span class="n">cur</span> <span class="o">=</span> <span class="n">cnn</span><span class="o">.</span><span class="n">cursor</span><span class="p">()</span><span class="w">
120120
</span> <span class="n">cur</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">SQL</span><span class="p">,</span> <span class="p">(</span><span class="n">arg1</span><span class="p">,</span> <span class="n">arg2</span><span class="p">))</span> <span class="c1"># or something else</span><span class="w">
121121

articles/2010/12/01/postgresql-notifications-psycopg2-eventlet/index.html

+8-8
Original file line numberDiff line numberDiff line change
@@ -92,12 +92,12 @@ <h2>Eventlet example</h2>
9292
<p>This example shows how hook the notifications system into Eventlet: using it with a <a class="reference external" href="https://en.wikipedia.org/wiki/WebSockets">WebSocket</a> it is possible to send an event from the database to the application and up to a web browser, all in push mode! The example requires PostgreSQL 9.0 and Psycopg 2.3 as it uses notification payloads.</p>
9393
<p>This function handles a WebSocket connection in a green thread: it creates a <tt class="docutils literal">Queue</tt> and opens a database connection (calling the <tt class="docutils literal">dblisten()</tt> function), then blocks on the queue waiting to receive notifications: as soon as any is received, its payload is forwarded to the browser. This is obviously just an example: a database connection for every browser wouldn't scale very much...</p>
9494
<pre class="code python literal-block">
95-
<span class="kn">import</span> <span class="nn">eventlet</span><span class="w">
96-
</span><span class="kn">from</span> <span class="nn">eventlet</span> <span class="kn">import</span> <span class="n">wsgi</span><span class="w">
97-
</span><span class="kn">from</span> <span class="nn">eventlet</span> <span class="kn">import</span> <span class="n">websocket</span><span class="w">
95+
<span class="kn">import</span><span class="w"> </span><span class="nn">eventlet</span><span class="w">
96+
</span><span class="kn">from</span><span class="w"> </span><span class="nn">eventlet</span><span class="w"> </span><span class="kn">import</span> <span class="n">wsgi</span><span class="w">
97+
</span><span class="kn">from</span><span class="w"> </span><span class="nn">eventlet</span><span class="w"> </span><span class="kn">import</span> <span class="n">websocket</span><span class="w">
9898

9999
</span><span class="nd">&#64;websocket</span><span class="o">.</span><span class="n">WebSocketWSGI</span><span class="w">
100-
</span><span class="k">def</span> <span class="nf">handle</span><span class="p">(</span><span class="n">ws</span><span class="p">):</span><span class="w">
100+
</span><span class="k">def</span><span class="w"> </span><span class="nf">handle</span><span class="p">(</span><span class="n">ws</span><span class="p">):</span><span class="w">
101101
</span><span class="sd">&quot;&quot;&quot;
102102
Receive a connection and send it database notifications.
103103
&quot;&quot;&quot;</span><span class="w">
@@ -111,11 +111,11 @@ <h2>Eventlet example</h2>
111111
<p>When <tt class="docutils literal">handle()</tt> blocks on the queue the control of the program switches to a different green thread, allowing the rest of the program to keep on running even if single-threaded.</p>
112112
<p>The <tt class="docutils literal">dblisten</tt> function sets up the listening database connection:</p>
113113
<pre class="code python literal-block">
114-
<span class="kn">import</span> <span class="nn">psycopg2</span><span class="w">
115-
</span><span class="kn">from</span> <span class="nn">psycopg2.extensions</span> <span class="kn">import</span> <span class="n">ISOLATION_LEVEL_AUTOCOMMIT</span><span class="w">
116-
</span><span class="kn">from</span> <span class="nn">eventlet.hubs</span> <span class="kn">import</span> <span class="n">trampoline</span><span class="w">
114+
<span class="kn">import</span><span class="w"> </span><span class="nn">psycopg2</span><span class="w">
115+
</span><span class="kn">from</span><span class="w"> </span><span class="nn">psycopg2.extensions</span><span class="w"> </span><span class="kn">import</span> <span class="n">ISOLATION_LEVEL_AUTOCOMMIT</span><span class="w">
116+
</span><span class="kn">from</span><span class="w"> </span><span class="nn">eventlet.hubs</span><span class="w"> </span><span class="kn">import</span> <span class="n">trampoline</span><span class="w">
117117

118-
</span><span class="k">def</span> <span class="nf">dblisten</span><span class="p">(</span><span class="n">q</span><span class="p">):</span><span class="w">
118+
</span><span class="k">def</span><span class="w"> </span><span class="nf">dblisten</span><span class="p">(</span><span class="n">q</span><span class="p">):</span><span class="w">
119119
</span><span class="sd">&quot;&quot;&quot;
120120
Open a db connection and add notifications to *q*.
121121
&quot;&quot;&quot;</span><span class="w">

articles/2011/06/12/psycopg-242-released/index.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ <h1>Psycopg 2.4.2 released</h1>
100100
<p>a much handier syntax for an often used connection property.</p>
101101
<p>The improvements to the transactions control are not only at interface level: Psycopg doesn't require any more setup queries when connecting to a database. A sequence of statements:</p>
102102
<pre class="code python literal-block">
103-
<span class="kn">import</span> <span class="nn">psycopg2</span><span class="w">
103+
<span class="kn">import</span><span class="w"> </span><span class="nn">psycopg2</span><span class="w">
104104
</span><span class="n">conn</span> <span class="o">=</span> <span class="n">psycopg2</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="s1">''</span><span class="p">)</span><span class="w">
105105
</span><span class="n">curs</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">cursor</span><span class="p">()</span><span class="w">
106106
</span><span class="n">curs</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s1">'SELECT 1'</span><span class="p">)</span><span class="w">

articles/2014/07/20/cancelling-postgresql-statements-python/index.html

+3-3
Original file line numberDiff line numberDiff line change
@@ -81,10 +81,10 @@ <h1>Cancelling PostgreSQL statements from Python</h1>
8181
<!-- CUT-HERE -->
8282
<p>Using psycopg in <a class="reference external" href="/docs/advanced.html#support-for-coroutine-libraries">green mode</a> moves the waiting from the libpq C code to Python: this gives Python some chance of interaction: it is possible for instance to catch a ctrl-c and send a cancel request:</p>
8383
<pre class="code python literal-block">
84-
<span class="kn">from</span> <span class="nn">select</span> <span class="kn">import</span> <span class="n">select</span><span class="w">
85-
</span><span class="kn">from</span> <span class="nn">psycopg2.extensions</span> <span class="kn">import</span> <span class="n">POLL_OK</span><span class="p">,</span> <span class="n">POLL_READ</span><span class="p">,</span> <span class="n">POLL_WRITE</span><span class="w">
84+
<span class="kn">from</span><span class="w"> </span><span class="nn">select</span><span class="w"> </span><span class="kn">import</span> <span class="n">select</span><span class="w">
85+
</span><span class="kn">from</span><span class="w"> </span><span class="nn">psycopg2.extensions</span><span class="w"> </span><span class="kn">import</span> <span class="n">POLL_OK</span><span class="p">,</span> <span class="n">POLL_READ</span><span class="p">,</span> <span class="n">POLL_WRITE</span><span class="w">
8686

87-
</span><span class="k">def</span> <span class="nf">wait_select_inter</span><span class="p">(</span><span class="n">conn</span><span class="p">):</span><span class="w">
87+
</span><span class="k">def</span><span class="w"> </span><span class="nf">wait_select_inter</span><span class="p">(</span><span class="n">conn</span><span class="p">):</span><span class="w">
8888
</span> <span class="k">while</span> <span class="mi">1</span><span class="p">:</span><span class="w">
8989
</span> <span class="k">try</span><span class="p">:</span><span class="w">
9090
</span> <span class="n">state</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">poll</span><span class="p">()</span><span class="w">

articles/2020/11/24/psycopg3-adaptation/index.html

+5-5
Original file line numberDiff line numberDiff line change
@@ -216,8 +216,8 @@ <h2>Customising psycopg3 adaptation</h2>
216216
infinity, we could create a subclass for the dumper and register it in the
217217
scope we want to use it, globally or just on a connection or cursor:</p>
218218
<pre class="code python literal-block">
219-
<span class="k">class</span> <span class="nc">InfDateDumper</span><span class="p">(</span><span class="n">DateDumper</span><span class="p">):</span><span class="w">
220-
</span> <span class="k">def</span> <span class="nf">dump</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">):</span><span class="w">
219+
<span class="k">class</span><span class="w"> </span><span class="nc">InfDateDumper</span><span class="p">(</span><span class="n">DateDumper</span><span class="p">):</span><span class="w">
220+
</span> <span class="k">def</span><span class="w"> </span><span class="nf">dump</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">):</span><span class="w">
221221
</span> <span class="k">if</span> <span class="n">obj</span> <span class="o">==</span> <span class="n">date</span><span class="o">.</span><span class="n">max</span><span class="p">:</span><span class="w">
222222
</span> <span class="k">return</span> <span class="sa">b</span><span class="s2">&quot;infinity&quot;</span><span class="w">
223223
</span> <span class="k">else</span><span class="p">:</span><span class="w">
@@ -237,8 +237,8 @@ <h2>Customising psycopg3 adaptation</h2>
237237
<tt class="docutils literal">date.max</tt> (instead of raising an exception), it could be done using a
238238
subclass of the builtin loader (or using an entirely new object if required):</p>
239239
<pre class="code python literal-block">
240-
<span class="k">class</span> <span class="nc">InfDateLoader</span><span class="p">(</span><span class="n">DateLoader</span><span class="p">):</span><span class="w">
241-
</span> <span class="k">def</span> <span class="nf">load</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span><span class="w">
240+
<span class="k">class</span><span class="w"> </span><span class="nc">InfDateLoader</span><span class="p">(</span><span class="n">DateLoader</span><span class="p">):</span><span class="w">
241+
</span> <span class="k">def</span><span class="w"> </span><span class="nf">load</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span><span class="w">
242242
</span> <span class="k">if</span> <span class="n">data</span> <span class="o">==</span> <span class="sa">b</span><span class="s2">&quot;infinity&quot;</span><span class="p">:</span><span class="w">
243243
</span> <span class="k">return</span> <span class="n">date</span><span class="o">.</span><span class="n">max</span><span class="w">
244244
</span> <span class="k">else</span><span class="p">:</span><span class="w">
@@ -247,7 +247,7 @@ <h2>Customising psycopg3 adaptation</h2>
247247
</span><span class="n">cur</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">&quot;select '2020-12-31'::date, 'infinity'::date&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">fetchone</span><span class="p">()</span><span class="w">
248248
</span><span class="c1"># Raises DataError: Python date doesn't support years after 9999: got infinity</span><span class="w">
249249

250-
</span><span class="kn">from</span> <span class="nn">psycopg3.oids</span> <span class="kn">import</span> <span class="n">builtins</span><span class="w">
250+
</span><span class="kn">from</span><span class="w"> </span><span class="nn">psycopg3.oids</span><span class="w"> </span><span class="kn">import</span> <span class="n">builtins</span><span class="w">
251251
</span><span class="n">InfDateLoader</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="n">builtins</span><span class="p">[</span><span class="s2">&quot;date&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">oid</span><span class="p">,</span> <span class="n">cur</span><span class="p">)</span><span class="w">
252252

253253
</span><span class="n">cur</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">&quot;select '2020-12-31'::date, 'infinity'::date&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">fetchone</span><span class="p">()</span><span class="w">

0 commit comments

Comments
 (0)