You can insert documents via a script using the frappe.get_doc method

Examples:

1. Insert a ToDo

todo = frappe.get_doc({"doctype":"ToDo", "description": "test"})
todo.insert()

2. Insert without the user's permissions being checked:

todo = frappe.get_doc({"doctype":"ToDo", "description": "test"})
todo.insert(ignore_permissions = True)

3. Submit after inserting

todo = frappe.get_doc({"doctype":"ToDo", "description": "test"})
todo.insert(ignore_permissions=True)
todo.submit()

4. Insert a document on saving of another document

class MyType(Document):
    def on_update(self):
        todo = frappe.get_doc({"doctype":"ToDo", "description": "test"})
        todo.insert()

5. Insert a document with child tables:

sales_order = frappe.get_doc({
    "doctype": "Sales Order",
    "company": "_Test Company",
    "customer": "_Test Customer",
    "delivery_date": "2013-02-23",
    "sales_order_details": [
        {
            "item_code": "_Test Item Home Desktop 100",
            "qty": 10.0,
            "rate": 100.0,
            "warehouse": "_Test Warehouse - _TC"
        }
    ]
})
sales_order.insert()