Postgres lösenords-hash är väldigt nära det du gjorde, det behöver bara användarnamnet inkluderas enligt följande:
pghash = "md5" + hashlib.md5(password + username).hexdigest()
AFAIK, postgres docs dokumenterar inte riktigt detta hashformat alls, och verkar anta att administratörer sällan kommer att hantera dessa hash direkt :( Det finns inga inbyggda metoder för att generera dessa hash som jag känner till. Om lösenordet som ges till ALTER USER
kommandot överensstämmer inte med postgres hash-format, det antar att lösenordet inte har hashas och tar hand om det internt - enligt dokumenten för CREATE ROLE:s ENCRYPTED nyckelord. (IMHO detta är ett felaktigt beteende, för om en hash beror på användarnamnet betyder det att hash inte kan kopieras och klistras in mellan olika konton, går sönder när kontot byter namn och (gissningsvis entropi) bara har ~6 bitar av effektivt salt).
Varningen högst upp i passlibs dokumentation för hashen kunde förmodligen vara tydligare. Det var tänkt att varna folk som bläddrar igenom passlib-dokumentationen att 1) denna hash var fruktansvärt osäker, 2) att de inte skulle använda den för användning i sina egna applikationer, och 3) att den bara var lämplig för syftet att arbeta med postgres användarkonton, eftersom det är det starkaste (och enda) hashformatet som postgres stöder för sina egna konton.
(Om du försöker använda postgres för att hasha lösenord för din egen applikations användarkonton, skulle jag starkt rekommendera Clodoaldos rekommendation att använda bcrypt genom tillägget pgcrypto).