mirror of
https://github.com/django/django.git
synced 2024-12-23 09:36:06 +00:00
Fixed #24365 -- Made inspectdb translate MySQL unsigned integer columns to positive integer fields.
This commit is contained in:
parent
af121b08e8
commit
94d8bea212
@ -17,6 +17,7 @@ class DatabaseFeatures(BaseDatabaseFeatures):
|
|||||||
can_introspect_autofield = True
|
can_introspect_autofield = True
|
||||||
can_introspect_binary_field = False
|
can_introspect_binary_field = False
|
||||||
can_introspect_small_integer_field = True
|
can_introspect_small_integer_field = True
|
||||||
|
can_introspect_positive_integer_field = True
|
||||||
supports_index_column_ordering = False
|
supports_index_column_ordering = False
|
||||||
supports_timezones = False
|
supports_timezones = False
|
||||||
requires_explicit_null_ordering_when_grouping = True
|
requires_explicit_null_ordering_when_grouping = True
|
||||||
|
@ -10,8 +10,8 @@ from django.db.models.indexes import Index
|
|||||||
from django.utils.datastructures import OrderedSet
|
from django.utils.datastructures import OrderedSet
|
||||||
from django.utils.deprecation import RemovedInDjango21Warning
|
from django.utils.deprecation import RemovedInDjango21Warning
|
||||||
|
|
||||||
FieldInfo = namedtuple('FieldInfo', FieldInfo._fields + ('extra',))
|
FieldInfo = namedtuple('FieldInfo', FieldInfo._fields + ('extra', 'is_unsigned'))
|
||||||
InfoLine = namedtuple('InfoLine', 'col_name data_type max_len num_prec num_scale extra column_default')
|
InfoLine = namedtuple('InfoLine', 'col_name data_type max_len num_prec num_scale extra column_default is_unsigned')
|
||||||
|
|
||||||
|
|
||||||
class DatabaseIntrospection(BaseDatabaseIntrospection):
|
class DatabaseIntrospection(BaseDatabaseIntrospection):
|
||||||
@ -45,7 +45,11 @@ class DatabaseIntrospection(BaseDatabaseIntrospection):
|
|||||||
return 'AutoField'
|
return 'AutoField'
|
||||||
elif field_type == 'BigIntegerField':
|
elif field_type == 'BigIntegerField':
|
||||||
return 'BigAutoField'
|
return 'BigAutoField'
|
||||||
|
if description.is_unsigned:
|
||||||
|
if field_type == 'IntegerField':
|
||||||
|
return 'PositiveIntegerField'
|
||||||
|
elif field_type == 'SmallIntegerField':
|
||||||
|
return 'PositiveSmallIntegerField'
|
||||||
return field_type
|
return field_type
|
||||||
|
|
||||||
def get_table_list(self, cursor):
|
def get_table_list(self, cursor):
|
||||||
@ -65,8 +69,13 @@ class DatabaseIntrospection(BaseDatabaseIntrospection):
|
|||||||
# - precision and scale (for decimal fields) (#5014)
|
# - precision and scale (for decimal fields) (#5014)
|
||||||
# - auto_increment is not available in cursor.description
|
# - auto_increment is not available in cursor.description
|
||||||
cursor.execute("""
|
cursor.execute("""
|
||||||
SELECT column_name, data_type, character_maximum_length, numeric_precision,
|
SELECT
|
||||||
numeric_scale, extra, column_default
|
column_name, data_type, character_maximum_length,
|
||||||
|
numeric_precision, numeric_scale, extra, column_default,
|
||||||
|
CASE
|
||||||
|
WHEN column_type LIKE '%% unsigned' THEN 1
|
||||||
|
ELSE 0
|
||||||
|
END AS is_unsigned
|
||||||
FROM information_schema.columns
|
FROM information_schema.columns
|
||||||
WHERE table_name = %s AND table_schema = DATABASE()""", [table_name])
|
WHERE table_name = %s AND table_schema = DATABASE()""", [table_name])
|
||||||
field_info = {line[0]: InfoLine(*line) for line in cursor.fetchall()}
|
field_info = {line[0]: InfoLine(*line) for line in cursor.fetchall()}
|
||||||
@ -90,6 +99,7 @@ class DatabaseIntrospection(BaseDatabaseIntrospection):
|
|||||||
line[6],
|
line[6],
|
||||||
field_info[col_name].column_default,
|
field_info[col_name].column_default,
|
||||||
field_info[col_name].extra,
|
field_info[col_name].extra,
|
||||||
|
field_info[col_name].is_unsigned,
|
||||||
)
|
)
|
||||||
))
|
))
|
||||||
)
|
)
|
||||||
|
@ -159,7 +159,8 @@ Internationalization
|
|||||||
Management Commands
|
Management Commands
|
||||||
~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
* ...
|
* :djadmin:`inspectdb` now translates MySQL's unsigned integer columns to
|
||||||
|
``PositiveIntegerField`` or ``PositiveSmallIntegerField``.
|
||||||
|
|
||||||
Migrations
|
Migrations
|
||||||
~~~~~~~~~~
|
~~~~~~~~~~
|
||||||
|
Loading…
Reference in New Issue
Block a user