def __init__(self, *args, **kwargs): super(DatabaseWrapper, self).__init__(*args, **kwargs) self.features = DatabaseFeatures(self) self.ops = DatabaseOperations(self) self.client = DatabaseClient(self) self.creation = DatabaseCreation(self) self.introspection = DatabaseIntrospection(self) self.validation = BaseDatabaseValidation(self)
class DatabaseWrapper(BaseDatabaseWrapper): vendor = 'postgresql' jdbc_driver_class_name = 'org.postgresql.Driver' jdbc_connection_url_pattern = 'jdbc:postgresql://%(HOST)s:%(PORT)s/%(NAME)s?stringtype=unspecified' jdbc_default_host = 'localhost' jdbc_default_port = 5432 jdbc_default_name = 'postgres' operators = { 'exact': '= %s', 'iexact': '= UPPER(%s)', 'contains': 'LIKE %s', 'icontains': 'LIKE UPPER(%s)', 'regex': '~ %s', 'iregex': '~* %s', 'gt': '> %s', 'gte': '>= %s', 'lt': '< %s', 'lte': '<= %s', 'startswith': 'LIKE %s', 'endswith': 'LIKE %s', 'istartswith': 'LIKE UPPER(%s)', 'iendswith': 'LIKE UPPER(%s)', } pattern_ops = { 'startswith': "LIKE %s || '%%%%'", 'istartswith': "LIKE UPPER(%s) || '%%%%'", } def __init__(self, *args, **kwargs): super(DatabaseWrapper, self).__init__(*args, **kwargs) self.features = DatabaseFeatures(self) self.ops = DatabaseOperations(self) self.client = DatabaseClient(self) self.creation = DatabaseCreation(self) self.introspection = DatabaseIntrospection(self) self.validation = BaseDatabaseValidation(self) def init_connection_state(self): settings_dict = dict(self.settings_dict) tz = 'UTC' if settings.USE_TZ else settings_dict.get('TIME_ZONE') if tz: try: get_parameter_status = self.connection.get_parameter_status except AttributeError: conn_tz = None else: conn_tz = get_parameter_status('TimeZone') if conn_tz != tz: cursor = CursorWrapper(self.connection.cursor()) try: cursor.execute(self.ops.set_time_zone_sql() % self.ops.quote_name(tz)) finally: cursor.close() # Commit after setting the time zone (see #17062) if not self.get_autocommit(): self.connection.commit() def check_constraints(self, table_names=None): """ To check constraints, we set constraints to immediate. Then, when, we're done we must ensure they are returned to deferred. """ self.cursor().execute('SET CONSTRAINTS ALL IMMEDIATE') self.cursor().execute('SET CONSTRAINTS ALL DEFERRED') def is_usable(self): try: self.connection.cursor().execute("SELECT 1") except self.Error: return False else: return True def schema_editor(self, *args, **kwargs): """ Returns a new instance of this backend's SchemaEditor. :param args: Arguments for DatabaseSchemaEditor :param kwargs: Keyword arguments for DatabaseSchemaEditor :return: DatabaseSchemaEditor instance """ return DatabaseSchemaEditor(self, *args, **kwargs) @cached_property def pg_version(self): with self.temporary_connection(): return get_version(self.connection)
class DatabaseWrapper(BaseDatabaseWrapper): vendor = 'postgresql' jdbc_driver_class_name = 'org.postgresql.Driver' jdbc_connection_url_pattern = 'jdbc:postgresql://%(HOST)s:%(PORT)s/%(NAME)s?stringtype=unspecified' jdbc_default_host = 'localhost' jdbc_default_port = 5432 jdbc_default_name = 'postgres' # This dictionary maps Field objects to their associated PostgreSQL column # types, as strings. Column-type strings can contain format strings; they'll # be interpolated against the values of Field.__dict__ before being output. # If a column type is set to None, it won't be included in the output. data_types = { 'AutoField': 'serial', 'BinaryField': 'bytea', 'BooleanField': 'boolean', 'CharField': 'varchar(%(max_length)s)', 'CommaSeparatedIntegerField': 'varchar(%(max_length)s)', 'DateField': 'date', 'DateTimeField': 'timestamp with time zone', 'DecimalField': 'numeric(%(max_digits)s, %(decimal_places)s)', 'FileField': 'varchar(%(max_length)s)', 'FilePathField': 'varchar(%(max_length)s)', 'FloatField': 'double precision', 'IntegerField': 'integer', 'BigIntegerField': 'bigint', 'IPAddressField': 'inet', 'GenericIPAddressField': 'inet', 'NullBooleanField': 'boolean', 'OneToOneField': 'integer', 'PositiveIntegerField': 'integer', 'PositiveSmallIntegerField': 'smallint', 'SlugField': 'varchar(%(max_length)s)', 'SmallIntegerField': 'smallint', 'TextField': 'text', 'TimeField': 'time', } data_type_check_constraints = { 'PositiveIntegerField': '"%(column)s" >= 0', 'PositiveSmallIntegerField': '"%(column)s" >= 0', } operators = { 'exact': '= %s', 'iexact': '= UPPER(%s)', 'contains': 'LIKE %s', 'icontains': 'LIKE UPPER(%s)', 'regex': '~ %s', 'iregex': '~* %s', 'gt': '> %s', 'gte': '>= %s', 'lt': '< %s', 'lte': '<= %s', 'startswith': 'LIKE %s', 'endswith': 'LIKE %s', 'istartswith': 'LIKE UPPER(%s)', 'iendswith': 'LIKE UPPER(%s)', } pattern_ops = { 'startswith': "LIKE %s || '%%%%'", 'istartswith': "LIKE UPPER(%s) || '%%%%'", } def __init__(self, *args, **kwargs): super(DatabaseWrapper, self).__init__(*args, **kwargs) self.features = DatabaseFeatures(self) self.ops = DatabaseOperations(self) self.client = DatabaseClient(self) self.creation = DatabaseCreation(self) self.introspection = DatabaseIntrospection(self) self.validation = BaseDatabaseValidation(self) def init_connection_state(self): settings_dict = dict(self.settings_dict) tz = 'UTC' if settings.USE_TZ else settings_dict.get('TIME_ZONE') if tz: try: get_parameter_status = self.connection.get_parameter_status except AttributeError: conn_tz = None else: conn_tz = get_parameter_status('TimeZone') if conn_tz != tz: cursor = CursorWrapper(self.connection.cursor()) try: cursor.execute(self.ops.set_time_zone_sql() % self.ops.quote_name(tz)) finally: cursor.close() # Commit after setting the time zone (see #17062) if not self.get_autocommit(): self.connection.commit() def create_cursor(self): return CursorWrapper(self.connection.cursor()) def check_constraints(self, table_names=None): """ To check constraints, we set constraints to immediate. Then, when, we're done we must ensure they are returned to deferred. """ self.cursor().execute('SET CONSTRAINTS ALL IMMEDIATE') self.cursor().execute('SET CONSTRAINTS ALL DEFERRED') def is_usable(self): try: self.connection.cursor().execute("SELECT 1") except self.Error: return False else: return True def schema_editor(self, *args, **kwargs): """ Returns a new instance of this backend's SchemaEditor. :param args: Arguments for DatabaseSchemaEditor :param kwargs: Keyword arguments for DatabaseSchemaEditor :return: DatabaseSchemaEditor instance """ return DatabaseSchemaEditor(self, *args, **kwargs) @cached_property def pg_version(self): with self.temporary_connection(): return get_version(self.connection)