Skip to content

Commit 21bbb82

Browse files
authored
Merge pull request #542 from fantix/instant-column-name
Instant Column Name
2 parents bc64653 + d0e51d6 commit 21bbb82

File tree

3 files changed

+19
-1
lines changed

3 files changed

+19
-1
lines changed

gino/api.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,7 @@ def __init__(self, bind=None, model_classes=None, query_ext=True,
327327
model_classes = self.model_base_classes
328328
self._model = declarative_base(self, model_classes)
329329
self.declared_attr = declared_attr
330+
self.quoted_name = sa.sql.quoted_name
330331
for mod in json_support, sa:
331332
for key in mod.__all__:
332333
if not hasattr(self, key) and key not in self.no_delegate:

gino/declarative.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,13 @@ def invert_get(self, key, default=None):
4747
return self._inverted_dict.get(key, default)
4848

4949

50+
class Dict(collections.OrderedDict):
51+
def __setitem__(self, key, value):
52+
if isinstance(value, sa.Column) and not value.name:
53+
value.name = key
54+
return super().__setitem__(key, value)
55+
56+
5057
class ModelType(type):
5158
def _check_abstract(self):
5259
if self.__table__ is None:
@@ -71,7 +78,7 @@ def __getattr__(self, item):
7178

7279
@classmethod
7380
def __prepare__(mcs, name, bases, **kwargs):
74-
return collections.OrderedDict()
81+
return Dict()
7582

7683
def __new__(mcs, name, bases, namespace, **kwargs):
7784
rv = type.__new__(mcs, name, bases, namespace)

tests/test_declarative.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,3 +243,13 @@ async def test_invert_dict():
243243
d['col2'] = 'c2'
244244
assert d.invert_get('c1') == 'col1'
245245
assert d.invert_get('c2') == 'col2'
246+
247+
248+
async def test_instant_column_name():
249+
class Model(db.Model):
250+
user = db.Column()
251+
assert user.name == 'user'
252+
253+
select_col = db.Column(name=db.quoted_name('select', False))
254+
assert select_col.name == 'select'
255+
assert not select_col.name.quote

0 commit comments

Comments
 (0)