Load drinks and their ingredients into dictionaries
Whether you need to store data in the DB is really gonna depend on your testing, but here are a few thoughts about how to reduce memory usage while still building the entire drink table at startup:


While they're convenient, you don't necessarily need to use dictionaries for this.  You could replace each dictionary with a tuple where the first item is the drink name, the second item is the drink id, and the rest of the items are tuples of size 2 with the ingredient name and the ratio for that ingredient.  This would change your example to ('Screwdriver', '4', ('vodka', 2), ('orange juice', 6)).  sys.getsizeof gives 280 for the dictionary and only 88 for the tuple, a significant reduction.
If you're still pressed for space, you can take advantage of the fact that you probably have a lot of overlap in terms of your ingredients.  Build a list with a string for each ingredient that one of your drinks uses.  Then each tuple can simply have an int referring to the index of the ingredient in your ingredient list.  This prevents you from storing a string like 'vodka' 20 different times.  Once again using sys.getsizeof gives a value of 42 for the string 'vodka' and a value of 24 for the number 100.  This will of course only work if you have enough overlap in your ingredients.


If those ideas aren't enough to reduce your memory usage to an acceptable amount, you're probably going to need to go with your second solution(unless some other folks have some better ideas!).  I don't really see one of your solutions as more pythonic than the other, so I wouldn't worry about that.

And enjoy the raspberry pi!