I am using read_sql function to pull data from a postgresql table. As I store that data in a dataframe, I could find that some integer dtype column is automatically getting converted to float, is there any way to prevent that while using read_sql functiononly
Since your column contains NaN values, which are floating point numbers, I don't think you can avoid this 'issue' loading from the Database without changing the query. 
If you wish to change the query, you can insert a WHERE clause that would exclude None values, or check if the row contains such a column value.
What I suggest would be to use .fillna(), and then to cast as integers using .astype('int')
Edit : Just in case, your question is wrong, you are saying 

Is there any way to change columns datatype that should be int became a float while using read_sql from table

But since it includes NaN, it is not expected to be an int, but a float.
Is there any way to change columns datatype that should be int became a float while using read_sql from table