Here's my cleanup routine for assets that have no AssetVersion:
def delete_empty_assets():
"""Delete all assets that have no versions."""
assets = SESSION.query("select id, name from Asset where latest_version is none").all()
for asset in assets:
print(f"found asset: {asset['id']} : {asset['name']}")
SESSION.delete(asset)
SESSION.commit()
SESSION is an instance of FtrackSession.
You've probably seen it already, but in the help on your ftrack webpage, there's help>API reference, which will list all entities and their properties. It's useful.