mirror of https://github.com/django/django.git
Add a SQlite backend. One test passes!
This commit is contained in:
parent
0b01395108
commit
d3d1e59921
|
@ -18,6 +18,7 @@ from django.db.backends.signals import connection_created
|
||||||
from django.db.backends.sqlite3.client import DatabaseClient
|
from django.db.backends.sqlite3.client import DatabaseClient
|
||||||
from django.db.backends.sqlite3.creation import DatabaseCreation
|
from django.db.backends.sqlite3.creation import DatabaseCreation
|
||||||
from django.db.backends.sqlite3.introspection import DatabaseIntrospection
|
from django.db.backends.sqlite3.introspection import DatabaseIntrospection
|
||||||
|
from django.db.backends.sqlite3.schema import DatabaseSchemaEditor
|
||||||
from django.utils.dateparse import parse_date, parse_datetime, parse_time
|
from django.utils.dateparse import parse_date, parse_datetime, parse_time
|
||||||
from django.utils.functional import cached_property
|
from django.utils.functional import cached_property
|
||||||
from django.utils.safestring import SafeString
|
from django.utils.safestring import SafeString
|
||||||
|
@ -336,6 +337,10 @@ class DatabaseWrapper(BaseDatabaseWrapper):
|
||||||
if self.settings_dict['NAME'] != ":memory:":
|
if self.settings_dict['NAME'] != ":memory:":
|
||||||
BaseDatabaseWrapper.close(self)
|
BaseDatabaseWrapper.close(self)
|
||||||
|
|
||||||
|
def schema_editor(self):
|
||||||
|
"Returns a new instance of this backend's SchemaEditor"
|
||||||
|
return DatabaseSchemaEditor(self)
|
||||||
|
|
||||||
FORMAT_QMARK_REGEX = re.compile(r'(?<!%)%s')
|
FORMAT_QMARK_REGEX = re.compile(r'(?<!%)%s')
|
||||||
|
|
||||||
class SQLiteCursorWrapper(Database.Cursor):
|
class SQLiteCursorWrapper(Database.Cursor):
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
from django.db.backends.schema import BaseDatabaseSchemaEditor
|
||||||
|
|
||||||
|
|
||||||
|
class DatabaseSchemaEditor(BaseDatabaseSchemaEditor):
|
||||||
|
|
||||||
|
sql_delete_table = "DROP TABLE %(table)s"
|
|
@ -44,18 +44,18 @@ class SchemaTests(TestCase):
|
||||||
# Remove any M2M tables first
|
# Remove any M2M tables first
|
||||||
for field in model._meta.local_many_to_many:
|
for field in model._meta.local_many_to_many:
|
||||||
try:
|
try:
|
||||||
cursor.execute("DROP TABLE %s CASCADE" % (
|
cursor.execute(connection.schema_editor().sql_delete_table % {
|
||||||
connection.ops.quote_name(field.rel.through._meta.db_table),
|
"table": connection.ops.quote_name(field.rel.through._meta.db_table),
|
||||||
))
|
})
|
||||||
except DatabaseError:
|
except DatabaseError:
|
||||||
connection.rollback()
|
connection.rollback()
|
||||||
else:
|
else:
|
||||||
connection.commit()
|
connection.commit()
|
||||||
# Then remove the main tables
|
# Then remove the main tables
|
||||||
try:
|
try:
|
||||||
cursor.execute("DROP TABLE %s CASCADE" % (
|
cursor.execute(connection.schema_editor().sql_delete_table % {
|
||||||
connection.ops.quote_name(model._meta.db_table),
|
"table": connection.ops.quote_name(model._meta.db_table),
|
||||||
))
|
})
|
||||||
except DatabaseError:
|
except DatabaseError:
|
||||||
connection.rollback()
|
connection.rollback()
|
||||||
else:
|
else:
|
||||||
|
|
Loading…
Reference in New Issue