# dbml-to-sqlalchemy
generate Model Class SqlAlchemy from database model dbml
## Installation
pip install dbml-to-sqlalchemy
Or
git clone https://github.com/fraoustin/dbml-to-sqlalchemy.git
cd dbml-to-sqlalchemy
python setup.py install
You can load test by
flake8 --ignore E501,E226,E128,F401
python -m unittest discover -s tests
## Usage
for sqlalchemy only
import os
from re import sub
import sqlalchemy as db
from sqlalchemy.orm import Session
from pydbml import PyDBML
from dbml_to_sqlalchemy import createModel
from dbml_to_sqlalchemy import mymodel
database_file = "sqlite://"
engine = db.create_engine(database_file, echo=False)
conn = engine.connect()
metadata = db.MetaData()
try:
from sqlalchemy.orm import DeclarativeBase
class Base(DeclarativeBase):
metadata = metadata
except Exception:
# for sqlalchemy 1.4
from sqlalchemy.orm import declarative_base
Base = declarative_base()
source = """
Table user {
id integer [pk, increment, note:'key of user']
name string [default: 'me', note:'only name']
Note: 'Stores user data'
}
Table post {
id integer [pk, increment]
user_id integer [ref: > user.id]
}
"""
parsed = PyDBML(source)
User = createModel(parsed.tables[0], Base)
Post = createModel(parsed.tables[1], Base)
print(User.__doc__)
print(Post.__doc__)
metadata.create_all(engine)
with Session(engine) as session:
user = User(id=1)
session.add_all([user, ])
session.commit()
post = Post(id=1, user_id=1)
session.add_all([post, ])
session.commit()
mypost = session.scalars(db.select(Post)).all()[0]
print(mypost.user.name)
for flask-sqlalchemy
import os
import logging
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from pydbml import PyDBML
from dbml_to_sqlalchemy import createModel, mymodel
app = Flask(__name__)
# db SQLAlchemy
database_file = "sqlite://"
app.config["SQLALCHEMY_DATABASE_URI"] = database_file
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
db = SQLAlchemy()
source = """
Table user {
id integer [primary key]
username varchar
role varchar
created_at timestamp
}
"""
parsed = PyDBML(source)
createModel(parsed.tables[0], db.Model)
def model_to_dict(obj):
return {c.name: getattr(obj, c.name) for c in obj.__table__.columns}
@app.route('/me')
def mepath():
return model_to_dict(mymodel.User.query.filter_by(id=1).first()), 200
if __name__ == "__main__":
db.init_app(app)
with app.app_context():
db.create_all()
me = mymodel.User(id=1, username='me')
db.session.add_all([me, ])
db.session.commit()
app.logger.setLevel(logging.DEBUG)
app.run(host='0.0.0.0', port=5000, debug=True)
## TODO
- manage view from https://github.com/jklukas/sqlalchemy-views (https://stackoverflow.com/questions/9766940/how-to-create-an-sql-view-with-sqlalchemy)
- voir la gestion des defaults
# Feature
- generate documentation
- TODO
# V. 0.9.2
- generate specific class for Enumarate
# V. 0.9.1
- add sample in README
# V. 0.9.0
- init repos
Raw data
{
"_id": null,
"home_page": "https://github.com/fraoustin/dbml-to-sqlalchemy.git",
"name": "dbml-to-sqlalchemy",
"maintainer": "",
"docs_url": null,
"requires_python": "",
"maintainer_email": "",
"keywords": "",
"author": "Fr\u00e9d\u00e9ric Aoustin",
"author_email": "fraoustin@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/48/0e/5b82ed1fb662888fb49ac720e179be31132a3f70d19db58e3ec83351c930/dbml-to-sqlalchemy-0.9.2.tar.gz",
"platform": "any",
"description": "# dbml-to-sqlalchemy\n\ngenerate Model Class SqlAlchemy from database model dbml\n\n\n## Installation\n\n\n pip install dbml-to-sqlalchemy\n \nOr\n\n git clone https://github.com/fraoustin/dbml-to-sqlalchemy.git\n cd dbml-to-sqlalchemy\n python setup.py install\n\nYou can load test by\n\n flake8 --ignore E501,E226,E128,F401\n python -m unittest discover -s tests\n\n\n## Usage\n\nfor sqlalchemy only \n\n import os\n from re import sub\n import sqlalchemy as db\n from sqlalchemy.orm import Session\n from pydbml import PyDBML\n\n from dbml_to_sqlalchemy import createModel\n from dbml_to_sqlalchemy import mymodel\n\n database_file = \"sqlite://\"\n engine = db.create_engine(database_file, echo=False)\n conn = engine.connect()\n metadata = db.MetaData()\n\n\n try:\n from sqlalchemy.orm import DeclarativeBase\n\n class Base(DeclarativeBase):\n metadata = metadata\n except Exception:\n # for sqlalchemy 1.4\n from sqlalchemy.orm import declarative_base\n Base = declarative_base()\n\n source = \"\"\"\n Table user {\n id integer [pk, increment, note:'key of user']\n name string [default: 'me', note:'only name']\n Note: 'Stores user data'\n }\n\n Table post {\n id integer [pk, increment]\n user_id integer [ref: > user.id]\n }\n \"\"\"\n\n parsed = PyDBML(source)\n\n\n User = createModel(parsed.tables[0], Base)\n Post = createModel(parsed.tables[1], Base)\n\n print(User.__doc__)\n print(Post.__doc__)\n\n metadata.create_all(engine)\n\n with Session(engine) as session:\n user = User(id=1)\n session.add_all([user, ])\n session.commit()\n post = Post(id=1, user_id=1)\n session.add_all([post, ])\n session.commit()\n mypost = session.scalars(db.select(Post)).all()[0]\n print(mypost.user.name)\n\n\n\nfor flask-sqlalchemy\n\n import os\n import logging\n from flask import Flask\n from flask_sqlalchemy import SQLAlchemy\n from pydbml import PyDBML\n from dbml_to_sqlalchemy import createModel, mymodel\n\n app = Flask(__name__)\n\n # db SQLAlchemy\n database_file = \"sqlite://\"\n app.config[\"SQLALCHEMY_DATABASE_URI\"] = database_file\n app.config[\"SQLALCHEMY_TRACK_MODIFICATIONS\"] = False\n db = SQLAlchemy()\n\n source = \"\"\"\n Table user {\n id integer [primary key]\n username varchar\n role varchar\n created_at timestamp\n }\n \"\"\"\n\n parsed = PyDBML(source)\n createModel(parsed.tables[0], db.Model)\n\n\n def model_to_dict(obj):\n return {c.name: getattr(obj, c.name) for c in obj.__table__.columns}\n\n\n @app.route('/me')\n def mepath():\n return model_to_dict(mymodel.User.query.filter_by(id=1).first()), 200\n\n\n if __name__ == \"__main__\":\n db.init_app(app)\n with app.app_context():\n db.create_all()\n me = mymodel.User(id=1, username='me')\n db.session.add_all([me, ])\n db.session.commit()\n app.logger.setLevel(logging.DEBUG)\n app.run(host='0.0.0.0', port=5000, debug=True)\n\n## TODO\n\n- manage view from https://github.com/jklukas/sqlalchemy-views (https://stackoverflow.com/questions/9766940/how-to-create-an-sql-view-with-sqlalchemy)\n- voir la gestion des defaults\n\n# Feature\n\n- generate documentation\n- TODO\n\n# V. 0.9.2\n\n- generate specific class for Enumarate\n\n# V. 0.9.1\n\n- add sample in README\n\n# V. 0.9.0\n\n- init repos\n\n",
"bugtrack_url": null,
"license": "",
"summary": "dbml-to-sqlalchemy extension for sqlachemy: upload dbml model in orm sqlalchemy",
"version": "0.9.2",
"project_urls": {
"Homepage": "https://github.com/fraoustin/dbml-to-sqlalchemy.git"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "480e5b82ed1fb662888fb49ac720e179be31132a3f70d19db58e3ec83351c930",
"md5": "9773606b66b5e8078a6067b3823ea087",
"sha256": "aa0075b367b23f93b826fea4e104613cd2d1de4eead74508aa2af37812ab6d0b"
},
"downloads": -1,
"filename": "dbml-to-sqlalchemy-0.9.2.tar.gz",
"has_sig": false,
"md5_digest": "9773606b66b5e8078a6067b3823ea087",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 5665,
"upload_time": "2023-09-26T15:02:18",
"upload_time_iso_8601": "2023-09-26T15:02:18.727417Z",
"url": "https://files.pythonhosted.org/packages/48/0e/5b82ed1fb662888fb49ac720e179be31132a3f70d19db58e3ec83351c930/dbml-to-sqlalchemy-0.9.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-09-26 15:02:18",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "fraoustin",
"github_project": "dbml-to-sqlalchemy",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "dbml-to-sqlalchemy"
}