Skip to main content
Donate to the Python Software Foundation or Purchase a PyCharm License to Benefit the PSF! Donate Now

CrystalDB is a simple and small ORM and no need to provide a model.

Project description

![image](doc/crystaldb.jpg)


CrystalDB
========
CrystalDB is a simple and small ORM. It has few concepts, making it easy to learn and intuitive to use.

* a small, expressive ORM, and no need to provide a model, so it will not be difficult for the problem of sub-library or sub-tables.
* python3.
* need mysql-client or pymysql or mysql.connector.
* currently only supports mysql.


Installation
=========
From PyPi:

$ pip install crysyaldb


Basic Usage
=========
* **Connect to the database:**

```python
import crystaldb

db_host = '127.0.0.1'
db_port = 3306
db_user = 'root'
db_pass = '123'
db_database = 'testdb'

db_handle = crystaldb.database(
dbn='mysql',
host=db_host,
port=db_port,
user=db_user,
passwd=db_pass,
db=db_database,
debug=True)
```

* **Create table:** (Temporarily not supported, need to be completed by yourself)

for example:

```python
CREATE TABLE `user` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`gender` varchar(16) DEFAULT NULL,
`name` varchar(16) DEFAULT NULL,
`birthday` varchar(16) DEFAULT NULL,
`age` int(11) unsigned DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
```

* **Create row:**
```python
values = {
'gender': 'girl',
'name': 'xiaoli_orm',
'birthday': '1982-08-02',
'age': 36
}
result = db_handle.operator("user").insert(**values)
print(result) # ==> 1
# If debug is True, the following log will be printed, time unit ms.
# 0.3162 (1): INSERT INTO user (age, birthday, gender, name) VALUES (36, '1982-08-02', 'girl', 'xiaoli_orm')
```

* **Querying:**
```python
result = db_handle.select("user", ["name", "age"]).filter(
age=36, gender="girl").query()
print(result.__len__()) # count
print(result) # <crystaldb.utils.IterBetter object at 0x1115246a0>
for item in result:
print(item) # <Storage {'name': 'xiaowang', 'age': 36}>
print(item.name) # xiaowang
# If debug is True, the following log will be printed, time unit ms.
# 0.8579 (5): SELECT user.name, user.age FROM user WHERE user.age = 36 AND user.gender = 'girl'
```

* **Update row:**
```python
where = dict(name="xiaoli_orm")
values = {'gender': 'boy', 'birthday': '1981-08-02', 'age': 37}
result = db_handle.operator("user").update(where, **values)
print(result) # 1
# If debug is True, the following log will be printed, time unit ms.
# 0.4399 (1): UPDATE user SET age = 37, birthday = '1981-08-02', gender = 'boy' WHERE name = 'xiaoli_orm';
```

* **Delete row:**
```python
where = dict(name="xiaoyu", age=27)
result = db_handle.operator("user").delete(where)
# If debug is True, the following log will be printed, time unit ms.
# 0.3782 (1): DELETE FROM user WHERE age = 27 AND name = 'xiaoyu';
```

* **Get Debug Queries:**
```python
print(db_handle.get_debug_queries_info)
# {'run_time': '0.8247', 'sql': "SELECT user.name, user.age FROM user WHERE user.age = 36 AND user.gender = 'girl'"}
```


Documentation
===============
* [Insert](./doc/insert.md)
* [Update](./doc/update.md)
* [Querying](./doc/query.md)
* [Delete](./doc/delete.md)


Learning more
===============
Check the documentation for more examples or read test cases in unit test code.


Change Log
===============
[Change Log](https://github.com/CrystalSkyZ/crystaldb.py/releases)


Discussing
===============
* submit issue
* email: fuzctc@gmail.com

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help File type Python version Upload date
crystaldb-1.0.3.tar.gz (22.7 kB) Copy SHA256 hash SHA256 Source None

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page