I am looking to send different data types to my arduino via a serial connection using python. I have already managed to send simple data such as strings over the serial line and I parse the data in my arduino code, but now I want to send something similar to a structure containing two integers and a string.
I was thinking I should just build the data I want to send as strings, concatenate them with a separator token, and parse this long string in my arduino code. Is this the usual way to send more data types at once, or is it better to send the variables separately?
Yes there is always a risk of loosing bytes. 
But how you do it is totally dependent on what kind of data you are sending. For example if the values you are sending is between 0 and 255 you can send the value as one byte.
If on the other hand you are sending multiple values and or strings it si a good practice to make use of the control characters in the ASCII table to mark the start of a sequence and seperation and identification of values. For example

STX "value_id1" US "value" RS "value_id2" US "value" ... ETX

If the integrity of the values are very important you could calculate a checksum "CRC" to send along the message so the receiver can check for errors.
If I want to send data to arduino via serial, should I send a long string at once, or send each variable separately?