ÿØÿàJFIFÿþ ÿÛC       ÿÛC ÿÀÿÄÿÄ"#QrÿÄÿÄ&1!A"2qQaáÿÚ ?Øy,æ/3JæÝ¹È߲؋5êXw²±ÉyˆR”¾I0ó2—PI¾IÌÚiMö¯–þrìN&"KgX:Šíµ•nTJnLK„…@!‰-ý ùúmë;ºgµŒ&ó±hw’¯Õ@”Ü— 9ñ-ë.²1<yà‚¹ïQÐU„ہ?.’¦èûbß±©Ö«Âw*VŒ) `$‰bØÔŸ’ëXÖ-ËTÜíGÚ3ð«g Ÿ§¯—Jx„–’U/ÂÅv_s(Hÿ@TñJÑãõçn­‚!ÈgfbÓc­:él[ðQe 9ÀPLbÃãCµm[5¿ç'ªjglå‡Ûí_§Úõl-;"PkÞÞÁQâ¼_Ñ^¢SŸx?"¸¦ùY騐ÒOÈ q’`~~ÚtËU¹CڒêV  I1Áß_ÿÙ 4]c@sdZddlZddlZddlmZddlmZddlmZddlmZddlmZdd lm Z dd lm Z dd lm Z dd l m Z d dlmZd dlmZd dlmZd dlmZd dlmZydd lm ZWnek r+dZnXdejfdYZdefdYZde fdYZde fdYZde fdYZdefdYZ de fd YZ!d!efd"YZ"e"Z#dS(#s .. 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:`.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` iNi(t_DECIMAL_TYPES(t _FLOAT_TYPES(t _INT_TYPES(t PGCompiler(t PGDialect(tPGExecutionContext(tPGIdentifierPreparer(tUUID(tJSONi(texc(t processors(ttypes(tutil(t quoted_namet _PGNumericcBseZdZRS(cCs|jr]|tkr+tjtj|jS|tksC|tkrGdSt j d|nB|tkrmdS|tks|tkrtj St j d|dS(NsUnknown PG numeric type: %d( t asdecimalRR tto_decimal_processor_factorytdecimaltDecimalt_effective_decimal_return_scaleRRtNoneR tInvalidRequestErrortto_float(tselftdialecttcoltype((sX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pytresult_processor`s   (t__name__t __module__R(((sX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pyR_st_PGNumericNoBindcBseZdZRS(cCsdS(N(R(RR((sX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pytbind_processorzs(RRR(((sX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pyRyst_PGJSONcBseZdZRS(cCs0|jdkrdStt|j||SdS(Nii (ii i(t_dbapi_versionRtsuperRR(RRR((sX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pyRs(RRR(((sX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pyR~st_PGUUIDcBseZdZdZRS(cCs|jsd}|SdS(NcSs|dk rt|}n|S(N(Rt _python_UUID(tvalue((sX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pytprocesss (tas_uuid(RRR%((sX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pyRs  cCs|jsd}|SdS(NcSs|dk rt|}n|S(N(Rtstr(R$((sX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pyR%s (R&(RRRR%((sX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pyRs  (RRRR(((sX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pyR"s tPGExecutionContext_pg8000cBseZRS((RR(((sX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pyR(stPGCompiler_pg8000cBseZdZdZRS(cKs*|j|j|d|j|j|S(Ns %% (R%tlefttright(Rtbinarytoperatortkw((sX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pytvisit_mod_binaryscCs,d|krtjdn|jddS(Ns%%s^The SQLAlchemy postgresql dialect now automatically escapes '%' in text() expressions to '%%'.t%(R twarntreplace(Rttext((sX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pytpost_process_texts  (RRR/R4(((sX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pyR)s tPGIdentifierPreparer_pg8000cBseZdZRS(cCs(|j|j|j}|jddS(NR0s%%(R2t escape_quotetescape_to_quote(RR$((sX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pyt_escape_identifiers(RRR8(((sX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pyR5stPGDialect_pg8000cBseZdZeZeZdZeZeZ e Z e Z dZejejieej6eej6ee6eej6ee6ZddZdZejdZ e!dZ"dZ#dZ$d Z%d Z&d Z'd Z(ee)d Z*ee)dZ+dZ,dZ-RS(tpg8000tformatt use_encodingcKstj||||_dS(N(Rt__init__tclient_encoding(RR>tkwargs((sX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pyR=scCs,|jdk|_tt|j|dS(Nii i(ii i(R tsupports_sane_multi_rowcountR!R9t initialize(Rt connection((sX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pyRAscCsX|jrPt|jdrPtgtjd|jjD]}t|^q7SdSdS(Nt __version__s(\d+)(?:[-\.]?|$)ic(icicic(tdbapithasattrttupletretfindallRCtint(Rtx((sX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pyR s )cCs tdS(NR:(t __import__(tcls((sX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pyRDscCsO|jdd}d|kr5t|d|dRW((sX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pytset_client_encodings    cCs|jjd|dfdS(Nit(RBt tpc_begin(RRBtxid((sX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pytdo_begin_twophasescCs|jjdS(N(RBt tpc_prepare(RRBRl((sX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pytdo_prepare_twophasescCs|jjd|dfdS(NiRj(RBt tpc_rollback(RRBRlt is_preparedtrecover((sX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pytdo_rollback_twophasescCs|jjd|dfdS(NiRj(RBt tpc_commit(RRBRlRqRr((sX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pytdo_commit_twophase#scCs$g|jjD]}|d^qS(Ni(RBt tpc_recover(RRBtrow((sX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pytdo_recover_twophase(scsgd}j|jdk rJfd}j|njdk rxfd}j|ntdkrfd}|SdSdS(NcSs|jtj|jt(R{(R(sX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pyR|5scsj|jdS(N(Rgtisolation_level(R{(R(sX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pyR|<sicsxD]}||qWdS(N((R{tfn(tfns(sX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pyR|Cs (tappendR>RR}tlen(RR|((RRsX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pyR|+s  N(.RRtdriverR]tsupports_unicode_statementstsupports_unicode_bindstdefault_paramstyleR@R(texecution_ctx_clsR)tstatement_compilerR5tpreparertdescription_encodingR t update_copyRtcolspecsRtsqltypestNumericRtFloatRRR"RRR=RAtmemoized_propertyR t classmethodRDRURXRgRiRmRoR`RsRuRxR|(((sX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pyR9s>            ($t__doc__RRGtbaseRRRRRRRRtjsonRRjR R R RR t sql.elementsR tuuidR#t ImportErrorRRRRRR"R(R)R5R9R(((sX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pytEs: