If you install peewee using setup.py install
, pwiz will be installed as a “script” and you can just run:
This will print a bunch of models to standard output. So you can do this:
python -m pwiz -e postgresql my_postgres_db > mymodels.py
python # <-- fire up an interactive shell
pwiz accepts the following command-line options:
- sqlite
- mysql
- postgresql
Warning
If a password is required to access your database, you will be prompted to enter it using a secure prompt.
The password will be included in the output. Specifically, at the top of the file a will be defined along with any required parameters – including the password.
pwiz examples
# Introspect a Sqlite database.
python -m pwiz -e sqlite path/to/sqlite_database.db
# Introspect a MySQL database, logging in as root. You will be prompted
# for a password ("-P").
python -m pwiz -e mysql -u root -P mysql_db_name
python -m pwiz -e postgres -u postgres -H 10.1.0.3 pg_db_name
Full example:
Produces the following output:
from peewee import *
database = SqliteDatabase('example.db', **{})
class UnknownField(object):
def __init__(self, *_, **__): pass
class BaseModel(Model):
class Meta:
database = database
class User(BaseModel):
class Meta:
table_name = 'user'
class Tweet(BaseModel):
content = TextField()
timestamp = DateTimeField()
user = ForeignKeyField(column_name='user_id', field='id', model=User)
class Meta:
table_name = 'tweet'
Observations:
- The foreign-key
Tweet.user_id
is detected and mapped correctly. - The
User.username
UNIQUE constraint is detected. - Each model explicitly declares its table name, even in cases where it is not necessary (as Peewee would automatically translate the class name into the appropriate table name).
- All the parameters of the are explicitly declared, even though they follow the conventions Peewee uses by default.
The UnknownField
is a placeholder that is used in the event your schema contains a column declaration that Peewee doesn’t know how to map to a field class.