ó ÃÌ4]c@sédZddlZddlZddlmZddlmZddlmZddlmZddlmZdd lm Z dd lm Z dd lm Z dd l m Z d dlmZd dlmZd dlmZd dlmZd dlmZydd lm ZWnek r+dZnXdejfd„ƒYZdefd„ƒYZde fd„ƒYZde fd„ƒYZde fd„ƒYZdefd„ƒYZ 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` iÿÿÿÿNi(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 _PGNumericcBseZd„ZRS(cCs£|jr]|tkr+tjtj|jƒS|tksC|tkrGdSt j d|ƒ‚nB|tkrmdS|tks…|tkrŒtj 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_PGNumericNoBindcBseZd„ZRS(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_PGJSONcBseZd„ZRS(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_PGUUIDcBseZd„Zd„ZRS(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.pytprocessŠs (tas_uuid(RRR%((sX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pyR‡s  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.pyR‘s  (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_pg8000cBseZd„Zd„ZRS(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_binary¡scCs,d|krtjdƒn|jddƒS(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_text¨s  (RRR/R4(((sX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pyR) s tPGIdentifierPreparer_pg8000cBseZd„ZRS(cCs(|j|j|jƒ}|jddƒS(NR0s%%(R2t escape_quotetescape_to_quote(RR$((sX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pyt_escape_identifier³s(RRR8(((sX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pyR5²stPGDialect_pg8000cBseZdZeZeZdZeZeZ e Z e Z dZejejieej6eej6ee6eej6ee6ƒZdd„Zd„Zejd„ƒZ e!d„ƒZ"d„Z#d„Z$d „Z%d „Z&d „Z'd „Z(ee)d „Z*ee)d„Z+d„Z,d„Z-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.pyRAÕscCsX|jrPt|jdƒrPtgtjd|jjƒD]}t|ƒ^q7ƒSdSdS(Nt __version__s(\d+)(?:[-\.]?|$)ic(icicic(tdbapithasattrttupletretfindallRCtint(Rtx((sX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pyR Ùs )cCs tdƒS(NR:(t __import__(tcls((sX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pyRDçscCsO|jddƒ}d|kr5t|dƒ|dRW((sX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pytset_client_encodings    cCs|jjd|dfƒdS(Nit(RBt tpc_begin(RRBtxid((sX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pytdo_begin_twophasescCs|jjƒdS(N(RBt tpc_prepare(RRBRl((sX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pytdo_prepare_twophasescCs|jjd|dfƒdS(NiRj(RBt tpc_rollback(RRBRlt is_preparedtrecover((sX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pytdo_rollback_twophasescCs|jjd|dfƒdS(NiRj(RBt tpc_commit(RRBRlRqRr((sX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pytdo_commit_twophase#scCs$g|jjƒD]}|d^qS(Ni(RBt tpc_recover(RRBtrow((sX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pytdo_recover_twophase(scs¥g‰d„}ˆj|ƒˆjdk rJ‡fd†}ˆj|ƒnˆjdk rx‡fd†}ˆj|ƒntˆƒdkr‡fd†}|SdSdS(NcSs|jtj|jt(R{(R(sX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pyR|5scsˆj|ˆjƒdS(N(Rgtisolation_level(R{(R(sX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pyR|<sicsxˆD]}||ƒ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.pyR9¸s>            ($t__doc__RRGtbaseRRRRRRRRtjsonRRjR R R RŒR t sql.elementsR tuuidR#t ImportErrorRRRRRR"R(R)R5R9R(((sX/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/pg8000.pytEs:    ”