Inserting rows
To insert data, you can call insert
function like this:
from abstra.tables import insert
inserted = insert("users", {
"name": "Michael Scott",
"email": "michael.scott@dundermifflin.com"
})
inserted # {"id": 123, "name": "Michael Scott", "email": "michael.scott@dundermifflin.com"}
Which is equivalent to
INSERT INTO users (name, email)
VALUES ('Michael Scott', 'michael.scott@dundermifflin.com')
RETURNING *
Using more types
Python's date, datetime, dict, tuple, set and list objects are serialized by default:
from abstra.tables import insert
import datetime
inserted = insert("episodes", {
"name": "Goodbye, Michael",
"aired_at": datetime.date(2011, 4, 28)
"trivia": {
"imdb_rating": 9.8,
}
})
inserted # {"name": "Goodbye, Michael", "aired_at": "2011-04-28", "trivia": {"imdb_rating": 9.8}}
Using dataclass
from dataclasses import dataclass
from abstra.tables import insert
@dataclass
class User:
name: str
email: str
user = User(
name="Michael Scott",
email="michael.scott@dundermifflin.com"
)
insert("users", user)
Multiple rows
The insert function also allow multiple rows at once sending a list of dictionaries.
from abstra.tables import insert
inserted = insert("users", [{
"name": "Michael Scott",
"email": "michael.scott@dundermifflin.com"
},{
"name": "Jim Halpert",
"email": "jim.halpert@dundermifflin.com"
}])
inserted
# [
# {"id": 123, "name": "Michael Scott", "email": "michael.scott@dundermifflin.com"},
# {"id": 124, "name": "Jim Halpert", "email": "jim.halpert@dundermifflin.com"}
# ]
None
vs unset
When using insert, it will create columns based on the keys in the dictionaries you pass as parameters. If a key is missing in any dictionary, it will use the default value for that column. If a value is None, it will be mapped as SQL NULL.
For example, if the default position in the employees table is 'Temp', this behavior will apply accordingly.
from abstra.tables import insert
inserted = insert("employees", [{
"name": "Pam Beesly",
"position": "Receptionist",
"email": "pam.beesly@dundermifflin.com"
}, {
"name": "Jan Levinson",
"position": None,
"email": "jan.levinson@dundermifflin.com"
}, {
"name": "Ryan Howard",
"email": "ryan.howard@dundermifflin.com"
}])
inserted
# [
# {"id": 126, "name": "Pam Beesly", "position": "Receptionist", "email": "pam.beesly@dundermifflin.com"},
# {"id": 127, "name": "Jan Levinson", "position": None, "email": "jan.levinson@dundermifflin.com"},
# {"id": 129, "name": "Ryan Howard", "position": "Temp", "email": "ryan.howard@dundermifflin.com"}
# ]