id%dZddlZddlZddlmZddlmZddlmZddlmZddlmZdd lm Z dd lm Z dd lm Z dd l m Z d dlmZd dlmZd dlmZd dlmZd dlmZ dd lm Zn #e$rdZYnwxYwGddejZGddeZGdde ZGdde ZGdde ZGddeZGdd e Z Gd!d"eZ!e!Z"dS)#a .. dialect:: postgresql+pg8000 :name: pg8000 :dbapi: pg8000 :connectstring: postgresql+pg8000://user:password@host:port/dbname[?key=value&key=value...] :url: https://pythonhosted.org/pg8000/ .. note:: The pg8000 dialect is **not tested as part of SQLAlchemy's continuous integration** and may have unresolved issues. The recommended PostgreSQL dialect is psycopg2. .. _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_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`` .. versionadded:: 0.9.5 support for AUTOCOMMIT isolation level when using pg8000. .. seealso:: :ref:`postgresql_isolation_level` :ref:`psycopg2_isolation_level` N)_DECIMAL_TYPES) _FLOAT_TYPES) _INT_TYPES) PGCompiler) PGDialect)PGExecutionContext)PGIdentifierPreparer)UUID)JSON)exc) processors)types)util) quoted_nameceZdZdZdS) _PGNumericc@|jrX|tvr$tjtj|jS|tvs |tvrdStj d|z|tvrdS|tvs |tvr tj Stj d|z)NzUnknown PG numeric type: %d) asdecimalrrto_decimal_processor_factorydecimalDecimal_effective_decimal_return_scalerrrInvalidRequestErrorto_float)selfdialectcoltypes Z/opt/cloudlinux/venv/lib/python3.11/site-packages/sqlalchemy/dialects/postgresql/pg8000.pyresult_processorz_PGNumeric.result_processor`s > ,&&!>OT%IN**g.C.Ct-1G;,&&tN**g.C.C!**-1G;N)__name__ __module__ __qualname__r!r"r rr_s#r"rceZdZdZdS)_PGNumericNoBindcdSNr&)rrs r bind_processorz_PGNumericNoBind.bind_processorzstr"N)r#r$r%r+r&r"r r(r(ys#r"r(ceZdZfdZxZS)_PGJSONcp|jdkrdStt|||S)N)r r)_dbapi_versionsuperr-r!)rrr __class__s r r!z_PGJSON.result_processors6  !J . .4$''88'JJ Jr")r#r$r%r! __classcell__r2s@r r-r-~sAKKKKKKKKKr"r-ceZdZdZdZdS)_PGUUIDc|jsd}|SdS)Nc(|t|}|Sr*) _python_UUIDvalues r processz'_PGUUID.bind_processor..processs$(//E r"as_uuid)rrr<s r r+z_PGUUID.bind_processor,|     N  r"c|jsd}|SdS)Nc(|t|}|Sr*strr:s r r<z)_PGUUID.result_processor..processs$JJE r"r=)rrrr<s r r!z_PGUUID.result_processorr?r"N)r#r$r%r+r!r&r"r r6r6s2r"r6ceZdZdS)PGExecutionContext_pg8000N)r#r$r%r&r"r rErEsDr"rEceZdZdZdZdS)PGCompiler_pg8000c V|j|jfi|dz|j|jfi|zS)Nz %% )r<leftright)rbinaryoperatorkws r visit_mod_binaryz"PGCompiler_pg8000.visit_mod_binarysF DL + + + + dl6<..2.. / r"c^d|vrtjd|ddS)N%%z^The SQLAlchemy postgresql dialect now automatically escapes '%' in text() expressions to '%%'.%)rwarnreplace)rtexts r post_process_textz#PGCompiler_pg8000.post_process_texts: 4<< I'    ||C&&&r"N)r#r$r%rNrUr&r"r rGrGs2   '''''r"rGceZdZdZdS)PGIdentifierPreparer_pg8000cn||j|j}|ddS)NrQrP)rS escape_quoteescape_to_quote)rr;s r _escape_identifierz.PGIdentifierPreparer_pg8000._escape_identifiers/ d/1EFF}}S$'''r"N)r#r$r%r[r&r"r rWrWs#(((((r"rWc "eZdZdZdZdZdZdZeZ e Z e Z dZejejejeejeeeejeeeiZddZfdZejdZe d Z!d Z"d Z#d Z$d Z%dZ&dZ' ddZ( ddZ)dZ*dZ+xZ,S)PGDialect_pg8000pg8000Tformat use_encodingNc 8tj|fi|||_dSr*)r__init__client_encoding)rrckwargss r rbzPGDialect_pg8000.__init__s)4**6***.r"cx|jdk|_tt||dS)N)r )r0supports_sane_multi_rowcountr1r] initialize)r connectionr2s r rizPGDialect_pg8000.initializes8,0,?:,M) %%00<<<<z3PGDialect_pg8000._dbapi_version..s.FFr"z(\d+)(?:[-\.]?|$))crrrr)dbapihasattrtuplerefindallrl)rs r r0zPGDialect_pg8000._dbapi_versionsj : '$*m<< Z,dj.D  >tF|,,DL CIDzr"c$dt|vS)Nzconnection is closedrB)rerjcursors r is_disconnectzPGDialect_pg8000.is_disconnects%Q//r"c |dd}t|dr|j}|dkr d|_dS||jvr^d|_|}|d|z|d|dStj d |d |j d d |jd )N_ rj AUTOCOMMITTFz=SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL %sCOMMITzInvalid value 'z2' for isolation_level. Valid isolation levels for z are z, z or AUTOCOMMIT) rSrtrj autocommit_isolation_lookuprexecutecloser ArgumentErrornamejoin)rrjlevelrs r set_isolation_levelz$PGDialect_pg8000.set_isolation_levels c3'' :| , , /#.J L $(J ! ! ! d, , ,$)J !&&((F NN%',-    NN8 $ $ $ LLNNNNN##55$)))TYYt/E%F%F%F%FH r"ct|dr|j}|}|d|zdz|d|dS)NrjzSET CLIENT_ENCODING TO ''r)rtrjrrr)rrjrcrs r set_client_encodingz$PGDialect_pg8000.set_client_encodingsm :| , , /#.J""$$1OCcIJJJx    r"c@|jd|dfdSNr)rj tpc_beginrrjxids r do_begin_twophasez"PGDialect_pg8000.do_begin_twophases%''C 55555r"c8|jdSr*)rj tpc_preparers r do_prepare_twophasez$PGDialect_pg8000.do_prepare_twophases))+++++r"Fc@|jd|dfdSr)rj tpc_rollbackrrjr is_preparedrecovers r do_rollback_twophasez%PGDialect_pg8000.do_rollback_twophases' **AsB<88888r"c@|jd|dfdSr)rj tpc_commitrs r do_commit_twophasez#PGDialect_pg8000.do_commit_twophase#s' ((!S"66666r"cHd|jDS)Ncg|] }|d S)rr&)rorows r rqz8PGDialect_pg8000.do_recover_twophase..)sFFF3AFFFr")rj tpc_recover)rrjs r do_recover_twophasez$PGDialect_pg8000.do_recover_twophase(s%FF*"7"C"C"E"EFFFFr"cgd}|jfd}|jfd}|tdkrfd}|SdS)NcN|jtj|jt<dSr*)py_typesr text_typer)conns r on_connectz/PGDialect_pg8000.on_connect..on_connect.s)-t~)FDM+ & & &r"c>|jdSr*)rrcrrs r rz/PGDialect_pg8000.on_connect..on_connect5"((t/CDDDDDr"c>|jdSr*)risolation_levelrs r rz/PGDialect_pg8000.on_connect..on_connect<rr"rc(D] }||dSr*r&)rfnfnss r rz/PGDialect_pg8000.on_connect..on_connectCs+BBtHHHHr")appendrcrlen)rrrs` @r rzPGDialect_pg8000.on_connect+s G G G :   + E E E E E JJz " " "   + E E E E E JJz " " " s88a<<      4r"r*)TF)-r#r$r%driversupports_unicode_statementssupports_unicode_bindsdefault_paramstylerhrEexecution_ctx_clsrGstatement_compilerrWpreparerdescription_encodingr update_copyrcolspecssqltypesNumericr(Floatrr r-r r6rbrimemoized_propertyr0 classmethodrsrrrrrrrrrrr3r4s@r r]r]s F"&!!#' 1**H)t  . NJ ' M7 '    H////=====      $$[$0002666,,,:?9999 :?7777 GGGr"r])#__doc__rrvbaserrrrrr r r jsonr rrrrrr sql.elementsruuidr9 ImportErrorrrr(r-r6rErGrWr]rr&r"r rs>>~ $$$$$$&&&&&&!!!!!!'''''')))))))LLL!4z KKKKKdKKKd,     2   ''''' '''$((((("6((( QQQQQyQQQh s A''A10A1