135 lines
4.4 KiB
Python
135 lines
4.4 KiB
Python
|
"""
|
||
|
PyMySQL: A pure-Python MySQL client library.
|
||
|
|
||
|
Copyright (c) 2010-2016 PyMySQL contributors
|
||
|
|
||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||
|
of this software and associated documentation files (the "Software"), to deal
|
||
|
in the Software without restriction, including without limitation the rights
|
||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||
|
copies of the Software, and to permit persons to whom the Software is
|
||
|
furnished to do so, subject to the following conditions:
|
||
|
|
||
|
The above copyright notice and this permission notice shall be included in
|
||
|
all copies or substantial portions of the Software.
|
||
|
|
||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||
|
THE SOFTWARE.
|
||
|
"""
|
||
|
import sys
|
||
|
|
||
|
from ._compat import PY2
|
||
|
from .constants import FIELD_TYPE
|
||
|
from .converters import escape_dict, escape_sequence, escape_string
|
||
|
from .err import (
|
||
|
Warning, Error, InterfaceError, DataError,
|
||
|
DatabaseError, OperationalError, IntegrityError, InternalError,
|
||
|
NotSupportedError, ProgrammingError, MySQLError)
|
||
|
from .times import (
|
||
|
Date, Time, Timestamp,
|
||
|
DateFromTicks, TimeFromTicks, TimestampFromTicks)
|
||
|
|
||
|
|
||
|
VERSION = (0, 7, 9, None)
|
||
|
threadsafety = 1
|
||
|
apilevel = "2.0"
|
||
|
paramstyle = "pyformat"
|
||
|
|
||
|
|
||
|
class DBAPISet(frozenset):
|
||
|
|
||
|
def __ne__(self, other):
|
||
|
if isinstance(other, set):
|
||
|
return frozenset.__ne__(self, other)
|
||
|
else:
|
||
|
return other not in self
|
||
|
|
||
|
def __eq__(self, other):
|
||
|
if isinstance(other, frozenset):
|
||
|
return frozenset.__eq__(self, other)
|
||
|
else:
|
||
|
return other in self
|
||
|
|
||
|
def __hash__(self):
|
||
|
return frozenset.__hash__(self)
|
||
|
|
||
|
|
||
|
STRING = DBAPISet([FIELD_TYPE.ENUM, FIELD_TYPE.STRING,
|
||
|
FIELD_TYPE.VAR_STRING])
|
||
|
BINARY = DBAPISet([FIELD_TYPE.BLOB, FIELD_TYPE.LONG_BLOB,
|
||
|
FIELD_TYPE.MEDIUM_BLOB, FIELD_TYPE.TINY_BLOB])
|
||
|
NUMBER = DBAPISet([FIELD_TYPE.DECIMAL, FIELD_TYPE.DOUBLE, FIELD_TYPE.FLOAT,
|
||
|
FIELD_TYPE.INT24, FIELD_TYPE.LONG, FIELD_TYPE.LONGLONG,
|
||
|
FIELD_TYPE.TINY, FIELD_TYPE.YEAR])
|
||
|
DATE = DBAPISet([FIELD_TYPE.DATE, FIELD_TYPE.NEWDATE])
|
||
|
TIME = DBAPISet([FIELD_TYPE.TIME])
|
||
|
TIMESTAMP = DBAPISet([FIELD_TYPE.TIMESTAMP, FIELD_TYPE.DATETIME])
|
||
|
DATETIME = TIMESTAMP
|
||
|
ROWID = DBAPISet()
|
||
|
|
||
|
|
||
|
def Binary(x):
|
||
|
"""Return x as a binary type."""
|
||
|
if PY2:
|
||
|
return bytearray(x)
|
||
|
else:
|
||
|
return bytes(x)
|
||
|
|
||
|
|
||
|
def Connect(*args, **kwargs):
|
||
|
"""
|
||
|
Connect to the database; see connections.Connection.__init__() for
|
||
|
more information.
|
||
|
"""
|
||
|
from .connections import Connection
|
||
|
return Connection(*args, **kwargs)
|
||
|
|
||
|
from . import connections as _orig_conn
|
||
|
if _orig_conn.Connection.__init__.__doc__ is not None:
|
||
|
Connect.__doc__ = _orig_conn.Connection.__init__.__doc__
|
||
|
del _orig_conn
|
||
|
|
||
|
|
||
|
def get_client_info(): # for MySQLdb compatibility
|
||
|
return '.'.join(map(str, VERSION))
|
||
|
|
||
|
connect = Connection = Connect
|
||
|
|
||
|
# we include a doctored version_info here for MySQLdb compatibility
|
||
|
version_info = (1,2,6,"final",0)
|
||
|
|
||
|
NULL = "NULL"
|
||
|
|
||
|
__version__ = get_client_info()
|
||
|
|
||
|
def thread_safe():
|
||
|
return True # match MySQLdb.thread_safe()
|
||
|
|
||
|
def install_as_MySQLdb():
|
||
|
"""
|
||
|
After this function is called, any application that imports MySQLdb or
|
||
|
_mysql will unwittingly actually use
|
||
|
"""
|
||
|
sys.modules["MySQLdb"] = sys.modules["_mysql"] = sys.modules["pymysql"]
|
||
|
|
||
|
|
||
|
__all__ = [
|
||
|
'BINARY', 'Binary', 'Connect', 'Connection', 'DATE', 'Date',
|
||
|
'Time', 'Timestamp', 'DateFromTicks', 'TimeFromTicks', 'TimestampFromTicks',
|
||
|
'DataError', 'DatabaseError', 'Error', 'FIELD_TYPE', 'IntegrityError',
|
||
|
'InterfaceError', 'InternalError', 'MySQLError', 'NULL', 'NUMBER',
|
||
|
'NotSupportedError', 'DBAPISet', 'OperationalError', 'ProgrammingError',
|
||
|
'ROWID', 'STRING', 'TIME', 'TIMESTAMP', 'Warning', 'apilevel', 'connect',
|
||
|
'connections', 'constants', 'converters', 'cursors',
|
||
|
'escape_dict', 'escape_sequence', 'escape_string', 'get_client_info',
|
||
|
'paramstyle', 'threadsafety', 'version_info',
|
||
|
|
||
|
"install_as_MySQLdb",
|
||
|
"NULL", "__version__",
|
||
|
]
|