U aC@sdZddlZddlZddlmZddlmZddlmZddlm Z ddlm Z dd lm Z dd lm Z dd lm Z dd lmZdd lmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZGdddejZGdddeZGdddeZGdddeZ Gdd d ejj!Z"Gd!d"d"ejj#Z$Gd#d$d$ejj%Z&Gd%d&d&eZ'Gd'd(d(eZ(Gd)d*d*e Z)Gd+d,d,e Z*Gd-d.d.ej+Z,Gd/d0d0ej-Z.Gd1d2d2ej/Z0Gd3d4d4ej1Z2Gd5d6d6ej3Z4Gd7d8d8ej5Z6Gd9d:d:ej7Z8e9Z:Gd;d<dd>ZGdCdDdDe Z?e?Z@dS)Ea .. 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 ` dialect: * ``READ COMMITTED`` * ``READ UNCOMMITTED`` * ``REPEATABLE READ`` * ``SERIALIZABLE`` * ``AUTOCOMMIT`` .. seealso:: :ref:`postgresql_isolation_level` :ref:`psycopg2_isolation_level` N)UUID)_DECIMAL_TYPES) _FLOAT_TYPES) _INT_TYPES)ENUMINTERVAL) PGCompiler) PGDialect)PGExecutionContext)PGIdentifierPreparerJSONJSONB) JSONPathType)exc) processors)types)util) quoted_namec@seZdZddZdS) _PGNumericcCsv|jrB|tkrttj|jS|tks.|tkr2dSt d|n0|tkrNdS|tks^|tkrdtj St d|dS)NzUnknown PG numeric type: %d) Z asdecimalrrZto_decimal_processor_factorydecimalDecimalZ_effective_decimal_return_scalerrrZInvalidRequestErrorZto_floatselfdialectcoltyper fC:\Users\vtejo\AppData\Local\Temp\pip-unpacked-wheel-nyjtotrf\sqlalchemy\dialects\postgresql\pg8000.pyresult_processorus$z_PGNumeric.result_processorN)__name__ __module__ __qualname__r"r r r r!rtsrc@seZdZddZdS)_PGNumericNoBindcCsdSNr )rrr r r!bind_processorsz_PGNumericNoBind.bind_processorN)r#r$r%r(r r r r!r&sr&c@seZdZddZddZdS)_PGJSONcCsdSr'r rr r r!r"sz_PGJSON.result_processorcCs|jSr'rrdbapir r r!get_dbapi_typesz_PGJSON.get_dbapi_typeNr#r$r%r"r,r r r r!r)sr)c@seZdZddZddZdS)_PGJSONBcCsdSr'r rr r r!r"sz_PGJSONB.result_processorcCs|jSr'rr*r r r!r,sz_PGJSONB.get_dbapi_typeNr-r r r r!r.sr.c@seZdZddZdS)_PGJSONIndexTypecCs tddS)Nzshould not be here)NotImplementedErrorr*r r r!r,sz_PGJSONIndexType.get_dbapi_typeNr#r$r%r,r r r r!r/sr/c@seZdZddZdS)_PGJSONIntIndexTypecCs|jSr'ZINTEGERr*r r r!r,sz"_PGJSONIntIndexType.get_dbapi_typeNr1r r r r!r2sr2c@seZdZddZdS)_PGJSONStrIndexTypecCs|jSr')STRINGr*r r r!r,sz"_PGJSONStrIndexType.get_dbapi_typeNr1r r r r!r4sr4c@seZdZddZdS)_PGJSONPathTypecCsdS)Nir r*r r r!r,sz_PGJSONPathType.get_dbapi_typeNr1r r r r!r6sr6c@seZdZddZddZdS)_PGUUIDcCs|jsdd}|SdS)NcSs|dk rt|}|Sr') _python_UUIDvaluer r r!processsz'_PGUUID.bind_processor..processZas_uuid)rrr;r r r!r(sz_PGUUID.bind_processorcCs|jsdd}|SdS)NcSs|dk rt|}|Sr')strr9r r r!r;sz)_PGUUID.result_processor..processr<)rrrr;r r r!r"sz_PGUUID.result_processorN)r#r$r%r(r"r r r r!r7s r7c@seZdZddZdS)_PGEnumcCs|jSr')UNKNOWNr*r r r!r,sz_PGEnum.get_dbapi_typeNr1r r r r!r>sr>c@s eZdZddZeddZdS) _PGIntervalcCs|jSr'rr*r r r!r,sz_PGInterval.get_dbapi_typecKs t|jdS)N)Z precision)r@Zsecond_precision)clsintervalkwr r r!adapt_emulated_to_nativesz$_PGInterval.adapt_emulated_to_nativeN)r#r$r%r, classmethodrDr r r r!r@sr@c@seZdZddZdS) _PGTimeStampcCs|jr dSdSdS)NiiZ)timezoner*r r r!r,sz_PGTimeStamp.get_dbapi_typeNr1r r r r!rFsrFc@seZdZddZdS)_PGTimecCs|jSr')ZTIMEr*r r r!r,sz_PGTime.get_dbapi_typeNr1r r r r!rHsrHc@seZdZddZdS) _PGIntegercCs|jSr'r3r*r r r!r,sz_PGInteger.get_dbapi_typeNr1r r r r!rIsrIc@seZdZddZdS)_PGSmallIntegercCs|jSr'r3r*r r r!r,sz_PGSmallInteger.get_dbapi_typeNr1r r r r!rJsrJc@seZdZddZdS) _PGNullTypecCs|jSr')ZNULLTYPEr*r r r!r,sz_PGNullType.get_dbapi_typeNr1r r r r!rKsrKc@seZdZddZdS) _PGBigIntegercCs|jSr')Z BIGINTEGERr*r r r!r,sz_PGBigInteger.get_dbapi_typeNr1r r r r!rLsrLc@seZdZddZdS) _PGBooleancCs|jSr')BOOLEANr*r r r!r,sz_PGBoolean.get_dbapi_typeNr1r r r r!rMsrMc@seZdZddZddZdS)PGExecutionContext_pg8000cCs:dtt|ddttddf}t|j|S)Nzc_%s_%s)hexid_server_side_idServerSideCursorZ_dbapi_connectioncursor)ridentr r r!create_server_side_cursors*z3PGExecutionContext_pg8000.create_server_side_cursorcCs|js dSdSr')Zcompiledrr r r!pre_exec sz"PGExecutionContext_pg8000.pre_execN)r#r$r%rWrYr r r r!rOsrOc@seZdZdZddZeddZeddZedd Zdd d Z ddZ ddZ dddZ ddZ ddZddZdddZd S)rTTcCs||_||_dSr')rVrU)rrUrVr r r!__init__szServerSideCursor.__init__cCs|jjSr')rU connectionrXr r r!r[szServerSideCursor.connectioncCs|jjSr')rUrowcountrXr r r!r\szServerSideCursor.rowcountcCs|jjSr')rU descriptionrXr r r!r]szServerSideCursor.descriptionr NcCs(d|jd|}|jj|||d|S)NzDECLARE z NO SCROLL CURSOR FOR )stream)rVrUexecute)r operationargsr^opr r r!r_#szServerSideCursor.executecCs|j|||Sr')rU executemany)rr`Z param_setsr r r!rc(szServerSideCursor.executemanycCs|jd|j|jS)NzFETCH FORWARD 1 FROM )rUr_rVfetchonerXr r r!rd,szServerSideCursor.fetchonecCs@|dkr|S|jdtt|d|j|jSdS)NzFETCH FORWARD z FROM )fetchallrUr_r=intrV)rnumr r r! fetchmany0s zServerSideCursor.fetchmanycCs|jd|j|jS)NzFETCH FORWARD ALL FROM )rUr_rVrerXr r r!re9szServerSideCursor.fetchallcCs |jd|j|jdS)NzCLOSE )rUr_rVcloserXr r r!ri=szServerSideCursor.closecGs|jj|dSr')rU setinputsizes)rsizesr r r!rjAszServerSideCursor.setinputsizescCsdSr'r )rsizecolumnr r r! setoutputsizeDszServerSideCursor.setoutputsize)r N)N)N)r#r$r% server_siderZpropertyr[r\r]r_rcrdrhrerirjrnr r r r!rTs      rTc@seZdZddZdS)PGCompiler_pg8000cKs$|j|jf|d|j|jf|S)Nz %% )r;leftright)rbinaryoperatorrCr r r!visit_mod_binaryIs z"PGCompiler_pg8000.visit_mod_binaryN)r#r$r%rvr r r r!rqHsrqc@seZdZddZdS)PGIdentifierPreparer_pg8000cOstj|f||d|_dS)NF)r rZZ_double_percents)rrakwargsr r r!rZRsz$PGIdentifierPreparer_pg8000.__init__N)r#r$r%rZr r r r!rwQsrwc)@s^eZdZdZdZdZdZdZdZe Z e Z e ZdZdZdZeejejeejeejeejeeje e!e"ejj#e$ejj%e&ejj'e(ejj)e*e+e,ej-e.e/e.ej0e1ej2e3ej4e5ej6e7ej8e9ej:e;iZd*ddZe?d d Z@d d ZAd dZBddZCddZDddZEddZFddZGddZHddZIddZJdd ZKd+d"d#ZLd,d$d%ZMd&d'ZNd(d)ZOdS)-PGDialect_pg8000pg8000TformatNcKs*tj|f|||_|jdkr&tddS)N)rz$pg8000 1.16.6 or greater is required)r rZclient_encoding_dbapi_versionr0)rr~rxr r r!rZs zPGDialect_pg8000.__init__cCs8|jr0t|jdr0tddtd|jjDSdSdS)N __version__cSsg|] }t|qSr )rf).0xr r r! sz3PGDialect_pg8000._dbapi_version..z(\d+)(?:[-\.]?|$))crr)r+hasattrtuplerefindallrrXr r r!rs zPGDialect_pg8000._dbapi_versioncCstdS)Nrz) __import__)rAr r r!r+szPGDialect_pg8000.dbapicCs8|jdd}d|kr$t|d|d<||jg|fS)Nuser)usernameport)Ztranslate_connect_argsrfupdatequery)rurloptsr r r!create_connect_argss   z$PGDialect_pg8000.create_connect_argscCs*t||jjrdt|krdSdt|kS)Nz network errorTzconnection is closed) isinstancer+ZInterfaceErrorr=)rer[rUr r r! is_disconnects zPGDialect_pg8000.is_disconnectcCs|dd}t|dr|j}|dkr,d|_nX||jkrfd|_|}|d||d|nt d ||j d |jfdS) N_ r[Z AUTOCOMMITTFz=SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL %sCOMMITzZInvalid value '%s' for isolation_level. Valid isolation levels for %s are %s or AUTOCOMMITz, ) replacerr[Z autocommitZ_isolation_lookuprUr_rir ArgumentErrornamejoin)rr[levelrUr r r!set_isolation_levels(     z$PGDialect_pg8000.set_isolation_levelcCs<|}z$|d|rdnd|dW5|XdS)N-SET SESSION CHARACTERISTICS AS TRANSACTION %sz READ ONLYz READ WRITErrUrir_rr[r:rUr r r! set_readonlys zPGDialect_pg8000.set_readonlycCs6|}z|d|d}W5|X|dkS)Nzshow transaction_read_onlyronrUrir_rdrr[rUvalr r r! get_readonlys   zPGDialect_pg8000.get_readonlycCs<|}z$|d|rdnd|dW5|XdS)NrZ DEFERRABLEzNOT DEFERRABLErrrr r r!set_deferrables zPGDialect_pg8000.set_deferrablecCs6|}z|d|d}W5|X|dkS)Nzshow transaction_deferrablerrrrr r r!get_deferrables   zPGDialect_pg8000.get_deferrablecCs@t|dr|j}|}|d|d|d|dS)Nr[zSET CLIENT_ENCODING TO ''r)rr[rUr_ri)rr[r~rUr r r!set_client_encodings   z$PGDialect_pg8000.set_client_encodingcCs6|jr|jdd|Dn|jfdd|DdS)NcSsg|]\}}}|qSr r rkeyZdbtypeZsqltyper r r!rsz7PGDialect_pg8000.do_set_input_sizes..cSsi|]\}}}|r||qSr r rr r r! sz7PGDialect_pg8000.do_set_input_sizes..) positionalrj)rrUZlist_of_tuplescontextr r r!do_set_input_sizess z#PGDialect_pg8000.do_set_input_sizescCs|jd|dfdSNr)r[Z tpc_beginrr[xidr r r!do_begin_twophase sz"PGDialect_pg8000.do_begin_twophasecCs|jdSr')r[Z tpc_preparerr r r!do_prepare_twophasesz$PGDialect_pg8000.do_prepare_twophaseFcCs|jd|dfdSr)r[Z tpc_rollbackrr[rZ is_preparedZrecoverr r r!do_rollback_twophasesz%PGDialect_pg8000.do_rollback_twophasecCs|jd|dfdSr)r[Z tpc_commitrr r r!do_commit_twophasesz#PGDialect_pg8000.do_commit_twophasecCsdd|jDS)NcSsg|] }|dqS)rr )rrowr r r!rsz8PGDialect_pg8000.do_recover_twophase..)r[Z tpc_recover)rr[r r r!do_recover_twophasesz$PGDialect_pg8000.do_recover_twophasecsgdd}|jdk r6fdd}|jdk rVfdd}|jrrfdd}|tdkrfdd}|SdSdS)NcSs|jtj|jt<dSr')Zpy_typesr text_typerconnr r r! on_connect!sz/PGDialect_pg8000.on_connect..on_connectcs|jdSr')rr~rrXr r!r(scs|jdSr')risolation_levelrrXr r!r/scs |dj|djdS)Nri)Zregister_in_adapter_json_deserializerrrXr r!r6srcsD] }||qdSr'r )rfn)fnsr r!rAs)appendr~rrlen)rrr )rrr!rs            zPGDialect_pg8000.on_connect)N)TF)TF)Pr#r$r%ZdriverZsupports_statement_cacheZsupports_unicode_statementsZsupports_unicode_bindsZdefault_paramstyleZsupports_sane_multi_rowcountrOZexecution_ctx_clsrqZstatement_compilerrwpreparerZsupports_server_side_cursorsZuse_setinputsizesZdescription_encodingrZ update_copyr ZcolspecssqltypesNumericr&ZFloatrrr)BooleanrMNullTyperKrr.rr6 JSONIndexTyper/JSONIntIndexTyper2JSONStrIndexTyper4rr7ZIntervalr@r DateTimerFTimerHIntegerrI SmallIntegerrJ BigIntegerrLEnumr>rZZmemoized_propertyrrEr+rrrrrrrrrrrrrrrr r r r!ryWs           ry)A__doc__rruuidrr8baserrrrr r r r r jsonrrrrrrrrrZ sql.elementsrrrr&r)r.rr/rr2rr4r6r7r>r@rrFrrHrrIrrJrrKrrLrrMcounterrSrOrTrqrwryrr r r r!s^U                      8 t