diff --git a/pykusto/expressions.py b/pykusto/expressions.py
index 6a7617a..967780d 100644
--- a/pykusto/expressions.py
+++ b/pykusto/expressions.py
@@ -2,6 +2,7 @@ from datetime import datetime, timedelta
 from typing import Any, List, Tuple, Mapping, Optional
 from typing import Union
 
+from pykusto.keywords import KUSTO_KEYWORDS
 from pykusto.kql_converters import KQL
 from pykusto.type_utils import plain_expression, aggregation_expression, PythonTypes, kql_converter, KustoType, typed_column, TypeRegistrar, get_base_types
 
@@ -786,8 +787,8 @@ class BaseColumn(BaseExpression):
         assert cls is not BaseColumn, "BaseColumn is abstract"
         return object.__new__(cls)
 
-    def __init__(self, name: str) -> None:
-        super().__init__(KQL(f"['{name}']" if '.' in name else name))
+    def __init__(self, name: str, quote: bool = False) -> None:
+        super().__init__(KQL(f"['{name}']" if quote or '.' in name or name in KUSTO_KEYWORDS else name))
         self._name = name
 
     def get_name(self) -> str:
@@ -872,6 +873,13 @@ class ColumnGenerator:
     def __getitem__(self, name: str) -> AnyTypeColumn:
         return AnyTypeColumn(name)
 
+    # noinspection PyMethodMayBeStatic
+    def of(self, name: str) -> AnyTypeColumn:
+        """
+        Workaround in case automatic column name quoting fails
+        """
+        return AnyTypeColumn(name, quote=True)
+
 
 # Recommended usage: from pykusto.expressions import column_generator as col
 # TODO: Is there a way to enforce this to be a singleton?
diff --git a/pykusto/keywords.py b/pykusto/keywords.py
new file mode 100644
index 0000000..e44c743
--- /dev/null
+++ b/pykusto/keywords.py
@@ -0,0 +1,149 @@
+# noinspection SpellCheckingInspection
+KUSTO_KEYWORDS = frozenset([
+    'abs',
+    'accumulate',
+    'acos',
+    'ago',
+    'and',
+    'anomalychart',
+    'anomalycolumns',
+    'areachart',
+    'array_concat',
+    'array_iif',
+    'array_index_of',
+    'array_length',
+    'array_rotate_left',
+    'array_rotate_right',
+    'array_shift_left',
+    'array_shift_right',
+    'array_slice',
+    'array_split',
+    'avg',
+    'avgif',
+    'axes',
+    'bag_keys',
+    'barchart',
+    'bin',
+    'bin',
+    'bin',
+    'bin_at',
+    'bin_auto',
+    'card',
+    'ceiling',
+    'columnchart',
+    'contains',
+    'cos',
+    'countif',
+    'dcount',
+    'dcount_hll',
+    'dcountif',
+    'dynamic',
+    'endofday',
+    'endofmonth',
+    'endofweek',
+    'endofyear',
+    'endswith',
+    'exp',
+    'floor',
+    'format_datetime',
+    'format_timespan',
+    'getmonth',
+    'gettype',
+    'getyear',
+    'hash',
+    'hourofday',
+    'iff',
+    'iif',
+    'in',
+    'isempty',
+    'isfinite',
+    'isinf',
+    'isnan',
+    'isnotempty',
+    'isnotnull',
+    'isnull',
+    'kind',
+    'ladderchart',
+    'legend',
+    'linechart',
+    'log',
+    'loggamma',
+    'make_bag',
+    'make_datetime',
+    'make_list',
+    'make_set',
+    'matches',
+    'max',
+    'maxif',
+    'min',
+    'minif',
+    'none',
+    'not',
+    'now',
+    'or',
+    'pack',
+    'pack_array',
+    'panels',
+    'parse_json',
+    'percentiles',
+    'piechart',
+    'pivotchart',
+    'pow',
+    'regex',
+    'round',
+    'scatterchart',
+    'series',
+    'set_difference',
+    'set_has_element',
+    'set_intersect',
+    'set_union',
+    'sign',
+    'split',
+    'sqrt',
+    'stacked',
+    'stacked100',
+    'stackedareachart',
+    'startofday',
+    'startofmonth',
+    'startofweek',
+    'startofyear',
+    'startswith',
+    'stdev',
+    'stdevif',
+    'stdevp',
+    'strcat_array',
+    'strcat_delim',
+    'strcmp',
+    'string_size',
+    'strlen',
+    'strrep',
+    'substring',
+    'sum',
+    'sumif',
+    'table',
+    'timechart',
+    'timepivot',
+    'title',
+    'tobool',
+    'todatetime',
+    'tohex',
+    'toint',
+    'tolong',
+    'tolower',
+    'tostring',
+    'toupper',
+    'unstacked',
+    'variance',
+    'varianceif',
+    'variancep',
+    'xaxis',
+    'xcolumn',
+    'xtitle',
+    'yaxis',
+    'ycolumns',
+    'ymax',
+    'ymin',
+    'ysplit',
+    'ysplit',
+    'ytitle',
+])

Column names that are language keywords don't parse well
if a column name is, for example, 'title', it should be parsed as "['title']", otherwise, Kusto throws an exception
diff --git a/test/test_expressions.py b/test/test_expressions.py
index bd17f79..be7f396 100644
--- a/test/test_expressions.py
+++ b/test/test_expressions.py
@@ -349,3 +349,13 @@ class TestExpressions(TestBase):
         self.assertIsInstance(field2, AnyTypeColumn)
         self.assertEqual('foo', field1.get_name())
         self.assertEqual('foo.bar', field2.get_name())
+
+    def test_column_name_quoting(self):
+        self.assertEqual(
+            ' | where [\'title\'] has "test"',
+            Query().where(t.title.has("test")).render()
+        )
+        self.assertEqual(
+            ' | where [\'stringField\'] has "test"',
+            Query().where(col.of('stringField').has("test")).render()
+        )

pip install -e .
parse_log_pytest
pytest
pytest pytest-cov flake8
3.7
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
adal==1.2.7
attrs @ file:///croot/attrs_1668696182826/work
azure-core==1.30.1
azure-kusto-data==0.0.44
certifi @ file:///croot/certifi_1671487769961/work/certifi
cffi==1.15.1
charset-normalizer==3.4.1
coverage==7.2.7
cryptography==44.0.2
flake8==5.0.4
flit_core @ file:///opt/conda/conda-bld/flit-core_1644941570762/work/source/flit_core
idna==3.10
importlib-metadata==4.2.0
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
isodate==0.7.2
mccabe==0.7.0
msrest==0.7.1
msrestazure==0.6.4.post1
numpy==1.21.6
oauthlib==3.2.2
packaging @ file:///croot/packaging_1671697413597/work
pandas==1.0.3
pluggy @ file:///tmp/build/80754af9/pluggy_1648042572264/work
py @ file:///opt/conda/conda-bld/py_1644396412707/work
pycodestyle==2.9.1
pycparser==2.21
pyflakes==2.5.0
PyJWT==2.8.0
-e git+https://github.com/Azure/pykusto.git@4232fc8aeea27d8d15c8cb1fd830493d50c8a3de#egg=pykusto
pytest==7.1.2
pytest-cov==4.1.0
python-dateutil==2.9.0.post0
pytz==2025.2
requests==2.31.0
requests-oauthlib==2.0.0
six==1.17.0
tomli @ file:///opt/conda/conda-bld/tomli_1657175507142/work
typing_extensions==4.7.1
urllib3==2.0.7
zipp @ file:///croot/zipp_1672387121353/work

name: pykusto
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - attrs=22.1.0=py37h06a4308_0
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2022.12.7=py37h06a4308_0
  - flit-core=3.6.0=pyhd3eb1b0_0
  - importlib_metadata=4.11.3=hd3eb1b0_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - packaging=22.0=py37h06a4308_0
  - pip=22.3.1=py37h06a4308_0
  - pluggy=1.0.0=py37h06a4308_1
  - py=1.11.0=pyhd3eb1b0_0
  - pytest=7.1.2=py37h06a4308_0
  - python=3.7.16=h7a1cb2a_0
  - readline=8.2=h5eee18b_0
  - setuptools=65.6.3=py37h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tomli=2.0.1=py37h06a4308_0
  - wheel=0.38.4=py37h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zipp=3.11.0=py37h06a4308_0
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - adal==1.2.7
      - azure-core==1.30.1
      - azure-kusto-data==0.0.44
      - cffi==1.15.1
      - charset-normalizer==3.4.1
      - coverage==7.2.7
      - cryptography==44.0.2
      - flake8==5.0.4
      - idna==3.10
      - importlib-metadata==4.2.0
      - isodate==0.7.2
      - mccabe==0.7.0
      - msrest==0.7.1
      - msrestazure==0.6.4.post1
      - numpy==1.21.6
      - oauthlib==3.2.2
      - pandas==1.0.3
      - pycodestyle==2.9.1
      - pycparser==2.21
      - pyflakes==2.5.0
      - pyjwt==2.8.0
      - pytest-cov==4.1.0
      - python-dateutil==2.9.0.post0
      - pytz==2025.2
      - requests==2.31.0
      - requests-oauthlib==2.0.0
      - six==1.17.0
      - typing-extensions==4.7.1
      - urllib3==2.0.7
prefix: /opt/conda/envs/pykusto

test/test_expressions.py::TestExpressions::test_column_name_quoting
test/test_expressions.py::TestExpressions::test_abs test/test_expressions.py::TestExpressions::test_add_timespan_to_date test/test_expressions.py::TestExpressions::test_add_timespan_to_timespan test/test_expressions.py::TestExpressions::test_and test/test_expressions.py::TestExpressions::test_array_access test/test_expressions.py::TestExpressions::test_array_access_expression_index test/test_expressions.py::TestExpressions::test_array_access_yields_any_expression test/test_expressions.py::TestExpressions::test_array_contains test/test_expressions.py::TestExpressions::test_assign_to test/test_expressions.py::TestExpressions::test_between test/test_expressions.py::TestExpressions::test_between_date test/test_expressions.py::TestExpressions::test_between_timespan test/test_expressions.py::TestExpressions::test_bin_auto test/test_expressions.py::TestExpressions::test_column_generator test/test_expressions.py::TestExpressions::test_column_with_dot test/test_expressions.py::TestExpressions::test_contains test/test_expressions.py::TestExpressions::test_div test/test_expressions.py::TestExpressions::test_dynamic test/test_expressions.py::TestExpressions::test_extend_const test/test_expressions.py::TestExpressions::test_ge test/test_expressions.py::TestExpressions::test_ge_date test/test_expressions.py::TestExpressions::test_gt_date test/test_expressions.py::TestExpressions::test_has test/test_expressions.py::TestExpressions::test_is_empty test/test_expressions.py::TestExpressions::test_is_in test/test_expressions.py::TestExpressions::test_le_date test/test_expressions.py::TestExpressions::test_lt_date test/test_expressions.py::TestExpressions::test_mapping_access test/test_expressions.py::TestExpressions::test_mapping_access_attribute test/test_expressions.py::TestExpressions::test_mapping_access_expression_index test/test_expressions.py::TestExpressions::test_mapping_access_yields_any_expression test/test_expressions.py::TestExpressions::test_mod test/test_expressions.py::TestExpressions::test_negation test/test_expressions.py::TestExpressions::test_not test/test_expressions.py::TestExpressions::test_not_contains test/test_expressions.py::TestExpressions::test_not_equals test/test_expressions.py::TestExpressions::test_or test/test_expressions.py::TestExpressions::test_repr test/test_expressions.py::TestExpressions::test_str_ends_with test/test_expressions.py::TestExpressions::test_str_equals test/test_expressions.py::TestExpressions::test_str_matches test/test_expressions.py::TestExpressions::test_str_not_equals test/test_expressions.py::TestExpressions::test_str_starts_with test/test_expressions.py::TestExpressions::test_sub_date_unknown_type test/test_expressions.py::TestExpressions::test_sub_datetime test/test_expressions.py::TestExpressions::test_sub_timespan test/test_expressions.py::TestExpressions::test_sub_unknown_type_datetime test/test_expressions.py::TestExpressions::test_sub_unknown_type_number test/test_expressions.py::TestExpressions::test_sub_unknown_type_timespan test/test_expressions.py::TestExpressions::test_subtract_timespan_from_timespan test/test_expressions.py::TestExpressions::test_to_bool test/test_expressions.py::TestExpressions::test_to_int test/test_expressions.py::TestExpressions::test_to_long
pykusto/keywords.py pykusto/expressions.py
pykusto/keywords.py pykusto/expressions.py