Peewee – Defining Database Dynamically


Peewee – Defining Database Dynamically



”;


If your database is scheduled to vary at run-time, use DatabaseProxy helper to have better control over how you initialise it. The DatabaseProxy object is a placeholder with the help of which database can be selected in run-time.

In the following example, an appropriate database is selected depending on the application’s configuration setting.


from peewee import *
db_proxy = DatabaseProxy() # Create a proxy for our db.

class MyUser (Model):
   name=TextField()
   city=TextField(constraints=[SQL("DEFAULT ''Mumbai''")])
   age=IntegerField()
   class Meta:
      database=db_proxy
      db_table=''MyUser''

# Based on configuration, use a different database.
if app.config[''TESTING'']:
   db = SqliteDatabase('':memory:'')
elif app.config[''DEBUG'']:
   db = SqliteDatabase(''mydatabase.db'')
else:
   db = PostgresqlDatabase(
      ''mydatabase'', host=''localhost'', port=5432, user=''postgres'', password=''postgres''
   )

# Configure our proxy to use the db we specified in config.
db_proxy.initialize(db)
db.connect()
db.create_tables([MyUser])

You can also associate models to any database object during run-time using bind() method declared in both database class and model class.

Following example uses bind() method in database class.


from peewee import *

class MyUser (Model):
   name=TextField()
   city=TextField(constraints=[SQL("DEFAULT ''Mumbai''")])
   age=IntegerField()

db = MySQLDatabase(''mydatabase'', host=''localhost'', port=3306, user=''root'', password='''')
db.connect()
db.bind([MyUser])
db.create_tables([MyUser])

The same bind() method is also defined in Model class.


from peewee import *

class MyUser (Model):
   name=TextField()
   city=TextField(constraints=[SQL("DEFAULT ''Mumbai''")])
   age=IntegerField()

db = MySQLDatabase(''mydatabase'', host=''localhost'', port=3306, user=''root'', password='''')
db.connect()
MyUser.bind(db)
db.create_tables([MyUser])

Advertisements

”;

Leave a Reply

Your email address will not be published. Required fields are marked *