Try adding `joinObject.memoryCache = True` before you initiate the join:

    from PyQt4.QtCore import *
	import qgis
	from qgis.core import QgsMapLayerRegistry, QgsVectorJoinInfo

	shp = QgsMapLayerRegistry.instance().mapLayersByName( "MyShapefile" )[0]
	csv = QgsMapLayerRegistry.instance().mapLayersByName( "MyDatabase" )[0]

	# Set up join parameters
	shpField='PIN'
	csvField='UPIN'
	joinObject = QgsVectorJoinInfo()
	joinObject.joinLayerId = csv.id()
	joinObject.joinFieldName = csvField
	joinObject.targetFieldName = shpField
	joinObject.memoryCache = True
	shp.addJoin(joinObject)
	# shp.createJoinCaches()