A simple MongoDB ORM that support types
Project description
TyMongo 🐍📦
PyMongo + Pydantic = TyMongo 🤩
TyMongo is a Python package designed to simplify your interaction with MongoDB by leveraging the power of pymongo for database connectivity and pydantic for efficient modeling and type creation through classes.
Features
- Seamless connection to MongoDB using pymongo. 🌐
- Data modeling and type creation with pydantic classes. 🧱
- Automatic data validation and type conversion. ✅
- Automatic data serialization and deserialization. 📦
Installation 📥
To install TyMongo, simply use pip:
pip install tymongo
Setup 🛠️
All you really need to do is to create .env file in your project root directory and add the following variables:
DATABASE_URL=your_database_url
DATABASE_NAME=your_database_name
And now you're ready to go! 🚀
Usage 📝
Creating a Model
To create a model, simply inherit from TyMongoModel and define your fields:
class User(TyMongoModel):
name: str
age: int
class Config:
collection = "users"
- Will work 100% like
BaseModelfrom pydantic, but with some extra features. 🤩 - Make sure you define inner class
Configand setcollectionto the name of the collection you want to use in your database. 📁 - You don't have to define
_idfield, it will be automatically created for you. 🆔
Creating a User
user = User(name="Majid", age=21)
# or
user_dict = {"name": "Majid", "age": 21}
user = User(**user_dict)
- You can pass any value to any field, it will be automatically converted to the type you defined. 🔄
- You can also pass a dictionary to the model, it will be automatically converted to the model. 🔄
Saving a User
user.save()
Now you have a new user in your database! 🎉
Editing a User
user.age = 22
user.save()
Now your user's age is 22 in your database! 🎉
Deleting a User
user.delete()
Now your user is deleted from your database! 🎉
Extra Features 🤩
Querying & Fields Validation
query = {"age": 22}
users = User.find(query)
Just like pymongo, you can pass a query to find method and it will return a list of all the users that match the query as a list of models, just make sure the dictionary keys match the model fields. 🔑
query = {
'x': 'some value',
'age': 21,
}
users = User.find(query)
This will raise an error because x is not a field in the model. ❌
Get a Single Document by ID
user = User.get("xxxxxxxxxxxxxxxxxxxxxxxx")
Get a Single Document by Query
q = {
'name' : 'Majid'
}
user = User.find_one(q)
What if I want to use pymongo directly? 🤔
You can access the collection object directly from the model:
collection = User.__collection__()
users = collection.find({"age": 22})
License
TyMongo is licensed under the terms of the MIT License.
Contributing 🤝
Contact 📧
Acknowledgements 🙏
Thank you for using TyMongo! 🙌 happy coding! 🚀
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tymongo-0.0.5.tar.gz.
File metadata
- Download URL: tymongo-0.0.5.tar.gz
- Upload date:
- Size: 5.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.12.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
10fe9c81973719e4718cd2d757e661d6d9ad1ff6b6a9d5ff8c296ae2d51eda26
|
|
| MD5 |
de308182958ab1642555cef47a0f1873
|
|
| BLAKE2b-256 |
4af8f5b12fff8a12adb00609b463fe51ce2b066c6beeafa16a3920b6dcf5dfd6
|
File details
Details for the file tymongo-0.0.5-py3-none-any.whl.
File metadata
- Download URL: tymongo-0.0.5-py3-none-any.whl
- Upload date:
- Size: 6.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.12.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
42cab3fd953d5860ca43c5c52227a24009f801114ac9d7fbcafe2f2d06db8bb8
|
|
| MD5 |
fdae0d4d9f9891c50f6e09e15e41176c
|
|
| BLAKE2b-256 |
e5b7409fe65625f1781e844bfe6e24a580362bd021ce0d97c42abcc0ccc5d74b
|