https://github.com/robinvandernoord/pydal2sql-core
CLI-agnostic pydal2sql code; Convert pydal define_tables to SQL using pydal's CREATE TABLE logic.
https://github.com/robinvandernoord/pydal2sql-core
db pydal pydal2sql python sql
Last synced: 12 months ago
JSON representation
CLI-agnostic pydal2sql code; Convert pydal define_tables to SQL using pydal's CREATE TABLE logic.
- Host: GitHub
- URL: https://github.com/robinvandernoord/pydal2sql-core
- Owner: robinvandernoord
- License: mit
- Created: 2023-07-31T20:57:02.000Z (over 2 years ago)
- Default Branch: master
- Last Pushed: 2024-08-05T16:10:48.000Z (over 1 year ago)
- Last Synced: 2025-03-17T23:39:42.925Z (about 1 year ago)
- Topics: db, pydal, pydal2sql, python, sql
- Language: Python
- Homepage: https://pypi.org/project/pydal2sql-core/
- Size: 195 KB
- Stars: 2
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# pydal2sql-core
[](https://pypi.org/project/pydal2sql-core)
[](https://pypi.org/project/pydal2sql-core)
[](https://github.com/psf/black)
[](https://opensource.org/licenses/MIT)
[](https://github.com/robinvandernoord/pydal2sql-core/actions)

-----
Companion library for [`pydal2sql`](https://github.com/robinvandernoord/pydal2sql) containing the actual logic.
The other library only serves as a Typer-based CLI front-end.
_More Documentation coming soon!_
## Table of Contents
- [Installation](#installation)
- [As a Python Library](#as-a-python-library)
- [License](#license)
## Installation
```bash
pip install pydal2sql-core
```
## As a Python Library
`pydal2sql-core` also exposes a `generate_sql` method that can perform the same actions on one (for CREATE) or two (for
ALTER) `pydal.Table` objects when used within Python.
```python
from pydal import DAL, Field
from pydal2sql_core import generate_sql
db = DAL(None, migrate=False) # <- without running database or with a different type of database
person_initial = db.define_table(
"person",
Field(
"name",
"string",
notnull=True,
),
Field("age", "integer", default=18),
Field("float", "decimal(2,3)"),
Field("nicknames", "list:string"),
Field("obj", "json"),
)
print(
generate_sql(
db.person, db_type="psql" # or sqlite, or mysql; Optional with fallback to currently using database type.
)
)
```
```sql
CREATE TABLE person
(
id INTEGER PRIMARY KEY AUTOINCREMENT,
name VARCHAR(512),
age INTEGER,
float NUMERIC(2, 3),
nicknames TEXT,
obj TEXT
);
```
```python
person_new = db.define_table(
"person",
Field(
"name",
"text",
),
Field("birthday", "datetime"),
redefine=True
)
generate_sql(
person_initial,
person_new,
db_type="psql"
)
```
```sql
ALTER TABLE person
ADD "name__tmp" TEXT;
UPDATE person
SET "name__tmp"=name;
ALTER TABLE person DROP COLUMN name;
ALTER TABLE person
ADD name TEXT;
UPDATE person
SET name="name__tmp";
ALTER TABLE person DROP COLUMN "name__tmp";
ALTER TABLE person
ADD birthday TIMESTAMP;
ALTER TABLE person DROP COLUMN age;
ALTER TABLE person DROP COLUMN float;
ALTER TABLE person DROP COLUMN nicknames;
ALTER TABLE person DROP COLUMN obj;
```
## License
`pydal2sql-core` is distributed under the terms of the [MIT](https://spdx.org/licenses/MIT.html) license.