@@ -378,6 +378,8 @@ def query_factory() -> Query:
378378 elif isinstance (df , pd .DataFrame ):
379379 from snowflake .connector .pandas_tools import write_pandas
380380
381+ ordered_df = df [list (source_columns_to_types )]
382+
381383 # Workaround for https://github.com/snowflakedb/snowflake-connector-python/issues/1034
382384 # The above issue has already been fixed upstream, but we keep the following
383385 # line anyway in order to support a wider range of Snowflake versions.
@@ -388,16 +390,16 @@ def query_factory() -> Query:
388390
389391 # See: https://stackoverflow.com/a/75627721
390392 for column , kind in source_columns_to_types .items ():
391- if is_datetime64_any_dtype (df .dtypes [column ]):
393+ if is_datetime64_any_dtype (ordered_df .dtypes [column ]):
392394 if kind .is_type ("date" ): # type: ignore
393- df [column ] = pd .to_datetime (df [column ]).dt .date # type: ignore
394- elif getattr (df .dtypes [column ], "tz" , None ) is not None : # type: ignore
395- df [column ] = pd .to_datetime (df [column ]).dt .strftime (
395+ ordered_df [column ] = pd .to_datetime (ordered_df [column ]).dt .date # type: ignore
396+ elif getattr (ordered_df .dtypes [column ], "tz" , None ) is not None : # type: ignore
397+ ordered_df [column ] = pd .to_datetime (ordered_df [column ]).dt .strftime (
396398 "%Y-%m-%d %H:%M:%S.%f%z"
397399 ) # type: ignore
398400 # https://github.com/snowflakedb/snowflake-connector-python/issues/1677
399401 else : # type: ignore
400- df [column ] = pd .to_datetime (df [column ]).dt .strftime (
402+ ordered_df [column ] = pd .to_datetime (ordered_df [column ]).dt .strftime (
401403 "%Y-%m-%d %H:%M:%S.%f"
402404 ) # type: ignore
403405
@@ -407,7 +409,7 @@ def query_factory() -> Query:
407409
408410 write_pandas (
409411 self ._connection_pool .get (),
410- df ,
412+ ordered_df ,
411413 temp_table .name ,
412414 schema = temp_table .db or None ,
413415 database = database .sql (dialect = self .dialect ) if database else None ,
0 commit comments