Skip to content

Commit

Permalink
Add some comments about porting from psycopg 2 to 3 (#1318)
Browse files Browse the repository at this point in the history
  • Loading branch information
dvarrazzo authored Feb 22, 2022
1 parent 02134da commit 25eb9f5
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 0 deletions.
1 change: 1 addition & 0 deletions AUTHORS
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ Contributors:
* Eric R Young (ERYoung11)
* Paweł Sacawa (psacawa)
* Bruno Inec (sweenu)
* Daniele Varrazzo

Creator:
--------
Expand Down
5 changes: 5 additions & 0 deletions pgcli/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,8 @@

from getpass import getuser
from psycopg2 import OperationalError, InterfaceError

# pg3: https://www.psycopg.org/psycopg3/docs/api/conninfo.html
from psycopg2.extensions import make_dsn, parse_dsn
import psycopg2

Expand Down Expand Up @@ -1580,12 +1582,15 @@ def format_arrays(data, headers, **_):
if hasattr(cur, "description"):
column_types = []
for d in cur.description:
# pg3: type_name = cur.adapters.types[d.type_code].name
if (
# pg3: type_name in ("numeric", "float4", "float8")
d[1] in psycopg2.extensions.DECIMAL.values
or d[1] in psycopg2.extensions.FLOAT.values
):
column_types.append(float)
if (
# pg3: type_name in ("int2", "int4", "int8")
d[1] == psycopg2.extensions.INTEGER.values
or d[1] in psycopg2.extensions.LONGINTEGER.values
):
Expand Down
10 changes: 10 additions & 0 deletions pgcli/pgexecute.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

# Cast all database input to unicode automatically.
# See http://initd.org/psycopg/docs/usage.html#unicode-handling for more info.
# pg3: These should be automatic: unicode is the default
ext.register_type(ext.UNICODE)
ext.register_type(ext.UNICODEARRAY)
ext.register_type(ext.new_type((705,), "UNKNOWN", ext.UNICODE))
Expand All @@ -32,6 +33,8 @@
_wait_callback_is_set = False


# pg3: it is already "green" but Ctrl-C breaks the query
# pg3: This should be fixed upstream: https://github.com/psycopg/psycopg/issues/231
def _wait_select(conn):
"""
copy-pasted from psycopg2.extras.wait_select
Expand Down Expand Up @@ -74,6 +77,8 @@ def _set_wait_callback(is_virtual_database):
ext.set_wait_callback(_wait_select)


# pg3: You can do something like:
# pg3: cnn.adapters.register_loader("date", psycopg.types.string.TextLoader)
def register_date_typecasters(connection):
"""
Casts date and timestamp values to string, resolves issues with out of
Expand Down Expand Up @@ -124,6 +129,7 @@ def register_json_typecasters(conn, loads_fn):
return available


# pg3: Probably you don't need this because by default unknown -> unicode
def register_hstore_typecaster(conn):
"""
Instead of using register_hstore() which converts hstore into a python
Expand All @@ -142,6 +148,7 @@ def register_hstore_typecaster(conn):
pass


# pg3: I don't know what is this
class ProtocolSafeCursor(psycopg2.extensions.cursor):
def __init__(self, *args, **kwargs):
self.protocol_error = False
Expand Down Expand Up @@ -392,6 +399,7 @@ def _json_typecaster(self, json_data):
return json_data

def failed_transaction(self):
# pg3: self.conn.info.transaction_status == psycopg.pq.TransactionStatus.INERROR
status = self.conn.get_transaction_status()
return status == ext.TRANSACTION_STATUS_INERROR

Expand Down Expand Up @@ -541,6 +549,8 @@ def search_path(self):
def view_definition(self, spec):
"""Returns the SQL defining views described by `spec`"""

# pg3: you may want to use `psycopg.sql` for client-side composition
# pg3: (also available in psycopg2 by the way)
template = "CREATE OR REPLACE {6} VIEW {0}.{1} AS \n{3}"
# 2: relkind, v or m (materialized)
# 4: reloptions, null
Expand Down

0 comments on commit 25eb9f5

Please sign in to comment.