1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
U
¸ý°d;?ã@sèdZddlZddlZddlmZddlmZddlmZddlm    Z    ddlm
Z
dd    lm Z dd
lm Z dd lm Z dd lmZdd lmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZGdd„dej ƒZ!Gdd„dej"ƒZ#Gdd„de#ej$ƒZ%Gdd „d e#ƒZ&Gd!d"„d"eƒZ'Gd#d$„d$eƒZ(Gd%d&„d&ejj)ƒZ*Gd'd(„d(ejj+ƒZ,Gd)d*„d*ejj-ƒZ.Gd+d,„d,eƒZ/Gd-d.„d.e
ƒZ0Gd/d0„d0e ƒZ1Gd1d2„d2ej2ƒZ3Gd3d4„d4ej4ƒZ5Gd5d6„d6ej6ƒZ7Gd7d8„d8ej8ƒZ9Gd9d:„d:ej:ƒZ;Gd;d<„d<ej<ƒZ=Gd=d>„d>ej>ƒZ?Gd?d@„d@ej@ƒZAGdAdB„dBeƒZBGdCdD„dDeeƒZCe D¡ZEGdEdF„dFeƒZFGdGdH„dHƒZGGdIdJ„dJe ƒZHGdKdL„dLeƒZIGdMdN„dNe ƒZJeJZKdS)Oaó    
.. dialect:: postgresql+pg8000
    :name: pg8000
    :dbapi: pg8000
    :connectstring: postgresql+pg8000://user:password@host:port/dbname[?key=value&key=value...]
    :url: https://pypi.org/project/pg8000/
 
.. versionchanged:: 1.4  The pg8000 dialect has been updated for version
   1.16.6 and higher, and is again part of SQLAlchemy's continuous integration
   with full feature support.
 
.. _pg8000_unicode:
 
Unicode
-------
 
pg8000 will encode / decode string values between it and the server using the
PostgreSQL ``client_encoding`` parameter; by default this is the value in
the ``postgresql.conf`` file, which often defaults to ``SQL_ASCII``.
Typically, this can be changed to ``utf-8``, as a more useful default::
 
    #client_encoding = sql_ascii # actually, defaults to database
                                 # encoding
    client_encoding = utf8
 
The ``client_encoding`` can be overridden for a session by executing the SQL:
 
SET CLIENT_ENCODING TO 'utf8';
 
SQLAlchemy will execute this SQL on all new connections based on the value
passed to :func:`_sa.create_engine` using the ``client_encoding`` parameter::
 
    engine = create_engine(
        "postgresql+pg8000://user:pass@host/dbname", client_encoding='utf8')
 
.. _pg8000_ssl:
 
SSL Connections
---------------
 
pg8000 accepts a Python ``SSLContext`` object which may be specified using the
:paramref:`_sa.create_engine.connect_args` dictionary::
 
    import ssl
    ssl_context = ssl.create_default_context()
    engine = sa.create_engine(
        "postgresql+pg8000://scott:tiger@192.168.0.199/test",
        connect_args={"ssl_context": ssl_context},
    )
 
If the server uses an automatically-generated certificate that is self-signed
or does not match the host name (as seen from the client), it may also be
necessary to disable hostname checking::
 
    import ssl
    ssl_context = ssl.create_default_context()
    ssl_context.check_hostname = False
    ssl_context.verify_mode = ssl.CERT_NONE
    engine = sa.create_engine(
        "postgresql+pg8000://scott:tiger@192.168.0.199/test",
        connect_args={"ssl_context": ssl_context},
    )
 
.. _pg8000_isolation_level:
 
pg8000 Transaction Isolation Level
-------------------------------------
 
The pg8000 dialect offers the same isolation level settings as that
of the :ref:`psycopg2 <psycopg2_isolation_level>` dialect:
 
* ``READ COMMITTED``
* ``READ UNCOMMITTED``
* ``REPEATABLE READ``
* ``SERIALIZABLE``
* ``AUTOCOMMIT``
 
.. seealso::
 
    :ref:`postgresql_isolation_level`
 
    :ref:`psycopg2_isolation_level`
 
 
éNé)ÚARRAY)Ú_DECIMAL_TYPES)Ú _FLOAT_TYPES)Ú
_INT_TYPES)ÚENUM©ÚINTERVAL)Ú
PGCompiler)Ú    PGDialect)ÚPGExecutionContext)ÚPGIdentifierPreparer)ÚJSON)ÚJSONB)Ú JSONPathType)Ú _SpaceVector)Ú    OIDVECTORé)Úexc)Úutil)Ú
processors)Úsqltypes)Ú quoted_namec@seZdZdZdS)Ú    _PGStringTN©Ú__name__Ú
__module__Ú __qualname__Úrender_bind_cast©rrú\d:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\sqlalchemy/dialects/postgresql/pg8000.pyrwsrc@seZdZdZdd„ZdS)Ú
_PGNumericTcCsv|jrB|tkrt tj|j¡S|tks.|tkr2dSt     
d|¡‚n0|tkrNdS|tks^|tkrdtj St     
d|¡‚dS)NzUnknown PG numeric type: %d) Z    asdecimalrrZto_decimal_processor_factoryÚdecimalÚDecimalZ_effective_decimal_return_scalerrrZInvalidRequestErrorZto_float©ÚselfÚdialectZcoltyperrr Úresult_processor~s$ÿÿÿz_PGNumeric.result_processorN©rrrrr'rrrr r!{sr!c@seZdZdZdZdS)Ú_PGFloatÚfloatTN©rrrZ__visit_name__rrrrr r)—sr)c@seZdZdd„ZdS)Ú_PGNumericNoBindcCsdS©Nr)r%r&rrr Úbind_processorsz_PGNumericNoBind.bind_processorN)rrrr.rrrr r,œsr,c@seZdZdZdd„ZdS)Ú_PGJSONTcCsdSr-rr$rrr r'¤sz_PGJSON.result_processorNr(rrrr r/¡sr/c@seZdZdZdd„ZdS)Ú_PGJSONBTcCsdSr-rr$rrr r'«sz_PGJSONB.result_processorNr(rrrr r0¨sr0c@seZdZdd„ZdS)Ú_PGJSONIndexTypecCs tdƒ‚dS)Nzshould not be here)ÚNotImplementedError©r%Údbapirrr Úget_dbapi_type°sz_PGJSONIndexType.get_dbapi_typeN©rrrr5rrrr r1¯sr1c@seZdZdZdZdS)Ú_PGJSONIntIndexTypeZjson_int_indexTNr+rrrr r7´sr7c@seZdZdZdZdS)Ú_PGJSONStrIndexTypeZjson_str_indexTNr+rrrr r8ºsr8c@s eZdZdS)Ú_PGJSONPathTypeN©rrrrrrr r9Àsr9c@seZdZdd„ZdS)Ú_PGEnumcCs|jSr-)ÚUNKNOWNr3rrr r5Çsz_PGEnum.get_dbapi_typeNr6rrrr r;Æsr;c@s$eZdZdZdd„Zedd„ƒZdS)Ú _PGIntervalTcCs|jSr-rr3rrr r5Îsz_PGInterval.get_dbapi_typecKs t|jdS)N)Z    precision)r=Zsecond_precision)ÚclsÚintervalÚkwrrr Úadapt_emulated_to_nativeÑsz$_PGInterval.adapt_emulated_to_nativeN)rrrrr5Ú classmethodrArrrr r=Ësr=c@seZdZdZdS)Ú _PGTimeStampTNrrrrr rCÖsrCc@seZdZdZdS)Ú_PGDateTNrrrrr rDÚsrDc@seZdZdZdS)Ú_PGTimeTNrrrrr rEÞsrEc@seZdZdZdS)Ú
_PGIntegerTNrrrrr rFâsrFc@seZdZdZdS)Ú_PGSmallIntegerTNrrrrr rGæsrGc@s eZdZdS)Ú _PGNullTypeNr:rrrr rHêsrHc@seZdZdZdS)Ú _PGBigIntegerTNrrrrr rIîsrIc@seZdZdZdS)Ú
_PGBooleanTNrrrrr rJòsrJc@seZdZdZdS)Ú_PGARRAYTNrrrrr rKösrKc@s eZdZdS)Ú _PGOIDVECTORNr:rrrr rLúsrLc@seZdZdd„Zdd„ZdS)ÚPGExecutionContext_pg8000cCs:dtt|ƒƒdd…ttƒƒdd…f}t|j ¡|ƒS)Nzc_%s_%sé)ÚhexÚidÚ_server_side_idÚServerSideCursorZ_dbapi_connectionÚcursor)r%Úidentrrr Úcreate_server_side_cursors*z3PGExecutionContext_pg8000.create_server_side_cursorcCs|js
dSdSr-)Zcompiled©r%rrr Úpre_execsz"PGExecutionContext_pg8000.pre_execN)rrrrUrWrrrr rMsrMc@s‚eZdZdZdd„Zedd„ƒZedd„ƒZedd    „ƒZdd d „Z    dd„Z
dd„Z ddd„Z dd„Z dd„Zdd„Zddd„Zd S)rRTcCs||_||_dSr-)rTrS)r%rSrTrrr Ú__init__szServerSideCursor.__init__cCs|jjSr-)rSÚ
connectionrVrrr rYszServerSideCursor.connectioncCs|jjSr-)rSÚrowcountrVrrr rZszServerSideCursor.rowcountcCs|jjSr-)rSÚ descriptionrVrrr r[szServerSideCursor.descriptionrNcCs(d|jd|}|jj|||d|S)NzDECLARE z NO SCROLL CURSOR FOR )Ústream)rTrSÚexecute)r%Ú    operationÚargsr\Úoprrr r]szServerSideCursor.executecCs|j ||¡|Sr-)rSÚ executemany)r%r^Z
param_setsrrr ra#szServerSideCursor.executemanycCs|j d|j¡|j ¡S)NzFETCH FORWARD 1 FROM )rSr]rTÚfetchonerVrrr rb'szServerSideCursor.fetchonecCs@|dkr| ¡S|j dtt|ƒƒd|j¡|j ¡SdS)NzFETCH FORWARD z FROM )ÚfetchallrSr]ÚstrÚintrT)r%Únumrrr Ú    fetchmany+s ÿzServerSideCursor.fetchmanycCs|j d|j¡|j ¡S)NzFETCH FORWARD ALL FROM )rSr]rTrcrVrrr rc4szServerSideCursor.fetchallcCs |j d|j¡|j ¡dS)NzCLOSE )rSr]rTÚcloserVrrr rh8szServerSideCursor.closecGs|jj|ŽdSr-)rSÚ setinputsizes)r%Úsizesrrr ri<szServerSideCursor.setinputsizescCsdSr-r)r%ÚsizeÚcolumnrrr Ú setoutputsize?szServerSideCursor.setoutputsize)rN)N)N)rrrÚ server_siderXÚpropertyrYrZr[r]rarbrgrcrhrirmrrrr rR s 
 
 
 
 
    rRc@seZdZdd„ZdS)ÚPGCompiler_pg8000cKs$|j|jf|Žd|j|jf|ŽS)Nz %% )ÚprocessÚleftÚright)r%ÚbinaryÚoperatorr@rrr Úvisit_mod_binaryDs ÿþÿz"PGCompiler_pg8000.visit_mod_binaryN)rrrrvrrrr rpCsrpc@seZdZdd„ZdS)ÚPGIdentifierPreparer_pg8000cOstj|f|ž|Žd|_dS)NF)r rXZ_double_percents)r%r_Úkwargsrrr rXMsz$PGIdentifierPreparer_pg8000.__init__N)rrrrXrrrr rwLsrwc1@s„eZdZdZdZdZdZdZdZe    Z
e Z e ZdZdZdZe ejejeejeejeejeeje ej!e"e#e$ejj%e&ejj'e(ejj)e*ejj+e,ej-e.e/e.ej0e1ej0e1ej2e3ej4e5ej6e7ej8e9ej:e;ej<e=ej>e?e@eAi¡Zd,dd„ZBejCdd„ƒZDeEd    d
„ƒZFd d „ZGd d„ZHdd„ZIdd„ZJdd„ZKdd„ZLdd„ZMdd„ZNdd„ZOdd„ZPdd „ZQd-d"d#„ZRd.d$d%„ZSd&d'„ZTd(d)„ZUejCd*d+„ƒZVdS)/ÚPGDialect_pg8000Úpg8000TÚformatNcKs*tj|f|Ž||_|jdkr&tdƒ‚dS)N)rééz$pg8000 1.16.6 or greater is required)r rXÚclient_encodingÚ_dbapi_versionr2)r%r~rxrrr rX…s
zPGDialect_pg8000.__init__cCs8|jr0t|jdƒr0tdd„t d|jj¡DƒƒSdSdS)NÚ __version__cSsg|] }t|ƒ‘qSr)re)Ú.0Úxrrr Ú
<listcomp>sÿz3PGDialect_pg8000._dbapi_version.<locals>.<listcomp>z(\d+)(?:[-\.]?|$))écr„r„)r4ÚhasattrÚtupleÚreÚfindallr€rVrrr rŒsÿþÿ    zPGDialect_pg8000._dbapi_versioncCstdƒS)Nrz)Ú
__import__)r>rrr Ú import_dbapišszPGDialect_pg8000.import_dbapicCs8|jdd}d|kr$t|dƒ|d<| |j¡g|fS)NÚuser)ÚusernameÚport)Ztranslate_connect_argsreÚupdateÚquery)r%ÚurlÚoptsrrr Úcreate_connect_argsžs
  z$PGDialect_pg8000.create_connect_argscCs*t||jjƒrdt|ƒkrdSdt|ƒkS)Nz network errorTzconnection is closed)Ú
isinstancer4ZInterfaceErrorrd)r%ÚerYrSrrr Ú is_disconnect¥s
ÿzPGDialect_pg8000.is_disconnectcCsdS)N)Ú
AUTOCOMMITzREAD COMMITTEDzREAD UNCOMMITTEDzREPEATABLE READZ SERIALIZABLEr)r%Údbapi_connectionrrr Úget_isolation_level_values¯sz+PGDialect_pg8000.get_isolation_level_valuescCsP| dd¡}|dkrd|_n0d|_| ¡}| d|›¡| d¡| ¡dS)NÚ_ú r–TFz;SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL ÚCOMMIT)ÚreplaceZ
autocommitrSr]rh)r%r—ÚlevelrSrrr Úset_isolation_level¸s ÿ
z$PGDialect_pg8000.set_isolation_levelcCs<| ¡}z$| d|rdnd¡| d¡W5| ¡XdS)Nú-SET SESSION CHARACTERISTICS AS TRANSACTION %sz    READ ONLYz
READ WRITEr›©rSrhr]©r%rYÚvaluerSrrr Ú set_readonlyÇs
ÿÿzPGDialect_pg8000.set_readonlycCs6| ¡}z| d¡| ¡d}W5| ¡X|dkS)Nzshow transaction_read_onlyrÚon©rSrhr]rb©r%rYrSÚvalrrr Ú get_readonlyÒs 
 
zPGDialect_pg8000.get_readonlycCs<| ¡}z$| d|rdnd¡| d¡W5| ¡XdS)NrŸZ
DEFERRABLEzNOT DEFERRABLEr›r r¡rrr Úset_deferrableÜs
ÿÿzPGDialect_pg8000.set_deferrablecCs6| ¡}z| d¡| ¡d}W5| ¡X|dkS)Nzshow transaction_deferrablerr¤r¥r¦rrr Úget_deferrableçs 
 
zPGDialect_pg8000.get_deferrablecCs8| ¡}| d| dd¡›d¡| d¡| ¡dS)NzSET CLIENT_ENCODING TO 'ú'z''r›)rSr]rœrh)r%r—r~rSrrr Ú_set_client_encodingñs
ÿÿ
z%PGDialect_pg8000._set_client_encodingcCs|j d|df¡dS©NrÚ)rYZ    tpc_begin©r%rYÚxidrrr Údo_begin_twophaseûsz"PGDialect_pg8000.do_begin_twophasecCs|j ¡dSr-)rYZ tpc_preparer¯rrr Údo_prepare_twophaseþsz$PGDialect_pg8000.do_prepare_twophaseFcCs|j d|df¡dSr­)rYZ tpc_rollback©r%rYr°Z is_preparedZrecoverrrr Údo_rollback_twophasesz%PGDialect_pg8000.do_rollback_twophasecCs|j d|df¡dSr­)rYZ
tpc_commitr³rrr Údo_commit_twophasesz#PGDialect_pg8000.do_commit_twophasecCsdd„|j ¡DƒS)NcSsg|] }|d‘qS)rr)rÚrowrrr rƒ sz8PGDialect_pg8000.do_recover_twophase.<locals>.<listcomp>)rYZ tpc_recover)r%rYrrr Údo_recover_twophase sz$PGDialect_pg8000.do_recover_twophasecsvg‰dd„}ˆ |¡ˆjdk    r6‡fdd„}ˆ |¡ˆjrR‡fdd„}ˆ |¡tˆƒdkrn‡fdd„}|SdSdS)NcSs|jt|jt<dSr-)Zpy_typesrdr©Úconnrrr Ú
on_connectsz/PGDialect_pg8000.on_connect.<locals>.on_connectcsˆ |ˆj¡dSr-)r¬r~r¸rVrr rºscs | dˆj¡| dˆj¡dS)NériÚ)Zregister_in_adapterÚ_json_deserializerr¸rVrr rºsrcsˆD] }||ƒqdSr-r)r¹Úfn)Úfnsrr rº*s)Úappendr~r¼Úlen)r%rºr)r¾r%r rºs
 
 
 
  zPGDialect_pg8000.on_connectcCsdS)Nú;rrVrrr Ú_dialect_specific_select_one2sz-PGDialect_pg8000._dialect_specific_select_one)N)TF)TF)WrrrZdriverZsupports_statement_cacheZsupports_unicode_statementsZsupports_unicode_bindsZdefault_paramstyleZsupports_sane_multi_rowcountrMZexecution_ctx_clsrpZstatement_compilerrwÚpreparerZsupports_server_side_cursorsrZdescription_encodingrZ update_copyr ZcolspecsrÚStringrÚNumericr,ÚFloatr)rr/ÚBooleanrJÚNullTyperHrr0rr9Ú JSONIndexTyper1ÚJSONIntIndexTyper7ÚJSONStrIndexTyper8ZIntervalr=r    ÚDateTimerCÚDaterDÚTimerEÚIntegerrFÚ SmallIntegerrGÚ
BigIntegerrIÚEnumr;rrKrrLrXZmemoized_propertyrrBrŠr’r•r˜ržr£r¨r©rªr¬r±r²r´rµr·rºrÂrrrr ryRs°éþ
 
 
 
     
 
 
ÿ
ÿ
$ry)LÚ__doc__r"r‡ÚarrayrZPGARRAYÚbaserrrrr    r
r r r ÚjsonrrrZ
pg_catalogrrr®rrZenginerZsqlrZ sql.elementsrrÄrrÅr!rÆr)r,r/r0rÉr1rÊr7rËr8r9r;r=rÌrCrÍrDrÎrErÏrFrÐrGrÈrHrÑrIrÇrJrKrLÚcounterrQrMrRrprwryr&rrrr Ú<module>    shU                     
8    f