Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
$ masonite-orm seed Userfrom masonite.orm.seeds import Seeder
class UserTableSeeder(Seeder):
def run(self):
"""Run the database seeds."""
passfrom masonite.orm.seeds import Seeder
from models import User
class UserTableSeeder(Seeder):
def run(self):
"""Run the database seeds."""
User.create({
"username": "Joe",
"email": "[email protected]",
"password": "secret"
})$ masonite-orm seed:run User# config/factories.py
def user_factory(self, faker):
return {
'name': faker.name(),
'email': faker.email(),
'password': 'secret'
}# config/factories.py
from masonite.orm import Factory
from models import User
def user_factory(self, faker):
return {
'name': faker.name(),
'email': faker.email(),
'password': 'secret'
}
Factory.register(User, user_factory)# config/factories.py
from masonite.orm import Factory
from models import User
def user_factory(self, faker):
return {
'name': faker.name(),
'email': faker.email(),
'password': 'secret'
}
def admin_user_factory(self, faker):
return {
'name': faker.name(),
'email': faker.email(),
'password': 'secret',
'is_admin': 1
}
Factory.register(User, user_factory)
Factory.register(User, admin_user_factory, name="admin_users")from config.factories import Factory
from models import User
users = Factory(User, 50).create() #== <masonite.orm.collections.Collection object>
user = Factory(User).create() #== <models.User object>from config.factories import Factory
from models import User
users = Factory(User, 50).make() #== <masonite.orm.collections.Collection object>
user = Factory(User).make() #== <models.User object>from config.factories import Factory
from models import User
users = Factory(User, 50).create(name="admin_users") #== <masonite.orm.collections.Collection object>from config.factories import Factory
from models import User
users = Factory(User, 50).create({'email': '[email protected]'}) #== <masonite.orm.collections.Collection object>$ pip install masonite-ormusers = User.get() #== <masoniteorm.collections.Collection>
users.count() #== 50
users.pluck('email') #== <masoniteorm.collections.Collection> of emails
for user in users:
user.email #== '[email protected]'# config/database.py
DATABASES = {
"default": "mysql",
"mysql": {
"host": "127.0.0.1",
"database": "masonite",
"user": "root",
"password": "",
"port": 3306
"prefix": "",
"options": {
#
}
},
"postgres": {
"host": "127.0.0.1",
"database": "masonite",
"user": "root",
"password": "",
"port": 5432
"prefix": "",
"options": {
#
}
},
"sqlite": {
"database": "masonite.sqlite3",
}
}# config/database.py
from masoniteorm.connections import ConnectionResolver
DATABASES = {
# ...
}
ConnectionResolver().set_connection_details(DATABASES)logger = logging.getLogger('masoniteorm.connection.queries')
logger.setLevel(logging.DEBUG)
handler = logging.StreamHandler()
logger.addHandler(handler)logger = logging.getLogger('masoniteorm.connection.queries')
logger.setLevel(logging.DEBUG)
handler = logging.StreamHandler()
file_handler = logging.FileHandler('queries.log')
logger.addHandler(handler)
logger.addHandler(file_handler)$ masonite-orm migration migration_for_users_table$ masonite-orm migration migration_for_users_table --create users$ masonite-orm migration migration_for_users_table --table usersclass MigrationForUsersTable(Migration):
def up(self):
"""
Run the migrations.
"""
with self.schema.create("users") as table:
table.increments('id')
table.string('username')
table.string('email').unique()
table.string('password')
table.boolean('is_admin')
table.integer('age')
table.timestamps()
def down(self):
"""
Revert the migrations.
"""
self.schema.drop("users")$ masonite-orm migrate:statuspython craft migrate -s$ masonite-orm migrate:refreshtable.foreign('local_column').references('other_column').on('other_table')table.foreign('local_column').references('other_column').on('other_table').on_update('set null')class MigrationForUsersTable(Migration):
def up(self):
"""
Run the migrations.
"""
with self.schema.table("users") as table:
table.string('email').nullable().change()
with self.schema.table("users") as table:
table.string('email').unique()
def down(self):
"""
Revert the migrations.
"""
passschema.truncate("users")schema.truncate("users", foreign_keys=False)schema.drop_table("users")schema.drop_table_if_exists("users")import os
DATABASES = {
'default': 'mysql',
'mysql': {
'driver': 'mysql',
'host': os.getenv('MYSQL_DATABASE_HOST'),
'user': os.getenv('MYSQL_DATABASE_USER'),
'password': os.getenv('MYSQL_DATABASE_PASSWORD'),
'database': os.getenv('MYSQL_DATABASE_DATABASE'),
'port': os.getenv('MYSQL_DATABASE_PORT'),
'prefix': '',
'options': {
'charset': 'utf8mb4',
},
'log_queries': True
},
'postgres': {
'driver': 'postgres',
'host': os.getenv('POSTGRES_DATABASE_HOST'),
'user': os.getenv('POSTGRES_DATABASE_USER'),
'password': os.getenv('POSTGRES_DATABASE_PASSWORD'),
'database': os.getenv('POSTGRES_DATABASE_DATABASE'),
'port': os.getenv('POSTGRES_DATABASE_PORT'),
'prefix': '',
'log_queries': True
},
'sqlite': {
'driver': 'sqlite',
'database': 'orm.sqlite3',
'prefix': '',
'log_queries': True
},
'mssql': {
'driver': 'mssql',
'host': os.getenv('MSSQL_DATABASE_HOST'),
'user': os.getenv('MSSQL_DATABASE_USER'),
'password': os.getenv('MSSQL_DATABASE_PASSWORD'),
'database': os.getenv('MSSQL_DATABASE_DATABASE'),
'port': os.getenv('MSSQL_DATABASE_PORT'),
'prefix': '',
'log_queries': True
},
}from orator import DatabaseManager, Model
DATABASES = {
# ...
}
DB = DatabaseManager(DATABASES)
Model.set_connection_resolver(DB)from masoniteorm.connections import ConnectionResolver
DATABASES = {
# ...
}
db = ConnectionResolver().set_connection_details(DATABASES)# Masonite
from masoniteorm.models import Model
class User(Model):
pass# Orator
from orator.orm import scope
class User(Model):
@scope
def popular(self, query):
return query.where('votes', '>', 100)# Masonite
from masoniteorm.scopes import scope
class User(Model):
@scope
def popular(self, query):
return query.where('votes', '>', 100)# Orator
from orator.relationships import has_one
class User(Model):
@has_one('other_key', 'local_key')
def phone(self):
from app.models import Phone
return Phone# Orator
from masoniteorm.relationships import belongs_to
class User(Model):
@belongs_to('local_key', 'other_key') # notice the keys also switched places
def phone(self):
from app.models import Phone
return Phoneuser = User.find(1)
user.phone().where('active', 1).get()user = User.find(1)
user.related('phone').where('active', 1).get()$ python craft model Postfrom masoniteorm.models import Model
class Post(Model):
"""Post Model"""
passuser = User.first()
users = User.all()
active_users = User.where('active', 1).first()class Clients:
__table__ = "users"class Clients:
__primary_key__ = "user_id"class Clients:
__connection__ = "staging"class Clients:
__fillable__ = ['email', "active", "password"]class Clients:
__timestamps__ = Falseclass User(Model):
__timezone__ = "Europe/Paris"from app.models import User
user = User.first()
user.name #== 'Joe'
user.email #== '[email protected]'from app.models import User
user = User.find(1)
user.name #== 'Joe'
user.email #== '[email protected]'from app.models import User
users = User.where('active', 1).get()
for users in user:
user.name #== 'Joe'
user.active #== '1'
user.email #== '[email protected]'users = User.find([1,2,3])
for users in user:
user.name #== 'Joe'
user.active #== '1'
user.email #== '[email protected]'user_emails = User.where('active', 1).get().pluck('email') #== Collection of email addressesfrom app.models import User
users = User.delete(1)from app.models import User
users = User.where('active', 0).delete()from app.models import User
users = User.where(lambda q: q.where('active', 1).where_null('deleted_at'))
# == SELECT * FROM `users` WHERE (`active` = '1' AND `deleted_at` IS NULL)from masoniteorm.relationships import belongs_to
class User:
@belongs_to
def company(self):
from app.models import Company
return Companyfrom masoniteorm.relationships import belongs_to
class User:
@belongs_to('company_id', 'id')
def company(self):
from app.models import Company
return Companyfrom masoniteorm.relationships import has_many
class User:
@has_many('company_id', 'id')
def posts(self):
from app.models import Post
return Postuser = User.first()
user.company #== <app.models.Company>
user.company.name #== Masonite X Inc.
for post in user.posts:
post.titleusers = User.all()
for user in users:
user.phoneSELECT * FROM users
SELECT * FROM phones where user_id = 1
SELECT * FROM phones where user_id = 2
SELECT * FROM phones where user_id = 3
SELECT * FROM phones where user_id = 4
...users = User.with_('phone').get()
for user in users:
user.phoneSELECT * FROM users
SELECT * FROM phones where user_id IN (1, 2, 3, 4)users = User.all()
for user in users:
for contacts in user.phone:
contact.nameSELECT * FROM users
SELECT * FROM phones where user_id = 1
SELECT * from contacts where phone_id = 30
SELECT * FROM phones where user_id = 2
SELECT * from contacts where phone_id = 31
SELECT * FROM phones where user_id = 3
SELECT * from contacts where phone_id = 32
SELECT * FROM phones where user_id = 4
SELECT * from contacts where phone_id = 33
...users = User.with_('phone.contacts').all()
for user in users:
for contacts in user.phone:
contact.nameSELECT * FROM users
SELECT * FROM phones where user_id IN (1,2,3,4)
SELECT * from contacts where phone_id IN (30, 31, 32, 33)user = User.where('active', 1).get()from masoniteorm.scopes import scope
class User(Model):
@scope
def active(self, query):
return query.where('active', 1)user = User.active().get()from masoniteorm.scopes import scope
class User(Model):
@scope
def active(self, query, active_or_inactive):
return query.where('active', active_or_inactive)user = User.active(1).get()
user = User.active(0).get()from masoniteorm.scopes import SoftDeletesMixin
class User(Model, SoftDeletesMixin):
# ..User.delete(1)
# == UPDATE `users` SET `deleted_at` = '2020-01-01 10:00:00' WHERE `id` = 1User.all() #== SELECT * FROM `users` WHERE `deleted_at` IS NULLUser.with_trashed().all() #== SELECT * FROM `users`User.only_trashed().all() #== SELECT * FROM `users` WHERE `deleted_at` IS NOT NULLUser.where('admin', 1).restore() #== UPDATE `users` SET `deleted_at` = NULL WHERE `admin` = '1'User.where('admin', 1).force_delete() #== DELETE FROM `users` WHERE `admin` = '1'# user migrations
with self.schema.create("users") as table:
# ...
table.soft_deletes()User.update_or_create({"username": "Joe"}, {
'active': 1
})from masoniteorm.scopes import UUIDPrimaryKeyMixin
class User(Model, UUIDPrimaryKeyMixin):
# ..with self.schema.create("users") as table:
table.uuid('id')
table.primary('id')import uuid
from masoniteorm.scopes import UUIDPrimaryKeyMixin
class User(Model, UUIDPrimaryKeyMixin):
__uuid_version__ = 3
# the two following parameters are only needed for UUID 3 and 5
__uuid_namespace__ = uuid.NAMESPACE_DNS
__uuid_name__ = "domain.comclass User(Model):
__casts__ = {"active": "int"}class User(Model):
def get_new_date(self, datetime=None):
# return new instance from datetime instance.class User(Model):
def get_new_datetime_string(self, datetime=None):
return self.get_new_date(datetime).to_datetime_string()python craft observer User --model Userclass UserObserver:
def created(self, user):
pass
def creating(self, user):
pass
#..from app.models import User
from app.observers.UserObserver import UserObserver
from masonite.providers import Provider
class ModelProvider(Provider):
def boot(self):
User.observe(UserObserver())
#..user = User.find(1)
articles = Articles.where('user_id', 2).get()
user.save_many('articles', articles)user = User.find(1)
phone = Phone.find(30)
user.associate('phone', phone)user = User
user #== <class User>
user.where('id', 1) #== <masonite.orm.Querybuilder object>user.where('id', 1).where('active', 1) #== <masonite.orm.Querybuilder object>user.select('id').where('id', 1).where('active', 1).get() #== <masonite.orm.Collection object>SELECT `id` FROM `users` WHERE `id` = '1' AND `active` = 1SELECT `id` FROM `users` WHERE `id` = '?' AND `active` = ?(1,1)SELECT * FROM `users` where `age` = '18'SELECT * FROM `users` where `age` = '?'SELECT * from `users` LIMIT 1SELECT TOP 1 * from `users`def select_format(self):
return "SELECT {columns} FROM {table} {limit}"def select_format(self):
return "SELECT {limit} {columns} FROM {table}"# MySQLGrammar
def limit_string(self):
return "LIMIT {limit}"# MSSQLGrammar
def limit_string(self):
return "TOP {limit}"# Everything completely abstracted into it's own class and class methods.
sql = self.select_format().format(
columns=self.process_columns(),
table=self.process_table(),
limit=self.process_limit()
)"SELECT {columns} FROM {table} {limit}".format(
columns="*",
table="`users`",
limit="LIMIT 1"
)
#== 'SELECT * FROM `users` LIMIT 1'"SELECT {limit} {columns} FROM {table} ".format(
columns="*",
table="`users`",
limit="TOP 1"
)
#== 'SELECT TOP 1 * FROM `users`'`users`"users"[users]table = self.table_string().format(table=table)# MySQL
table = "`{table}`".format(table=table)# MSSQL
table = "[{table}]".format(table=table)def _compile_select(self):
"SELECT {columns} FROM {table} {limit}".format(
columns="*",
table="`users`",
limit="LIMIT 1"
)
#== 'SELECT * FROM `users` LIMIT 1'def _compile_select(self):
"SELECT {columns} FROM {table} {wheres} {limit}".format(
columns=self.process_columns(),
table=self.process_from(),
limit=self.process_limit()
wheres=self.process_wheres
)
#== 'SELECT * FROM `users` LIMIT 1'def _compile_select(self):
self.select_format().format(
columns=self.process_columns(),
table=self.process_from(),
limit=self.process_limit()
wheres=self.process_wheres
)
#== 'SELECT * FROM `users` LIMIT 1'class User(Model):
passresult = User().where('...')result = User.where('...')user = User.where('age', 18)
#== <masonite.orm.QueryBuilder object>user = User.where('age', 18).where('name', 'Joe').limit(1)
#== <masonite.orm.QueryBuilder object x100>user = User.where('age', 18).where('name', 'Joe').limit(1).get()
#== <masonite.orm.Collection object x101>user = User.where('age', 18).where('name', 'Joe').limit(1).first()
#== <app.User object x100>class User:
@belongs_to('local_key', 'foreign_key')
def profile(self):
return Profileuser = User.find(1)
user.profile.cityuser = User.find(1)
user.profile().cityCREATE TABLE `table` (
`name` VARCHAR(255)
)Schema.table('users') as blueprint:
blueprint.string('name')
blueprint.integer('age')Schema.table('users') as blueprint:
blueprint.string('name')table.add_column('name', column_type='string')from masoniteorm.query import QueryBuilder
builder = QueryBuilder().table("users")from masoniteorm.query import QueryBuilder
builder = QueryBuilder().on('staging').table("users")# Without models
user = QueryBuilder().table("users").first()
# == {"id": 1, "name": "Joe" ...}
# With models
from masoniteorm.models import Model
class User(Model):
pass
user = QueryBuilder(model=User).table("users").first()
# == <app.models.User>builder.table('users').select('username').get()
# SELECT `username` from `users`builder.table('users').first()
# SELECT `username` from `users` LIMIT 1builder.table('users').all()
# SELECT * from `users`builder.table('users').select('username').get()builder.table('users').select('username').all()builder.table('users').where('username', 'Joe').where('age', 18).get()builder.table('users').where({"username": "Joe", "age": 18}).get()builder.table('users').where('age', '=', 18).get()
builder.table('users').where('age', '>', 18).get()
builder.table('users').where('age', '<', 18).get()
builder.table('users').where('age', '>=', 18).get()
builder.table('users').where('age', '<=', 18).get()builder.table('users').where_null('admin').get()builder.table('users').where_not_null('admin').get()builder.table('users').where_in('age', [18,21,25]).get()builder.table('users').where_like('name', "Jo%").get()
builder.table('users').where_not_like('name', "Jo%").get()builder.table("users").where(lambda q: q.where("active", 1).where_null("activated_at")).get()
# SELECT * FROM "users" WHERE ("users"."active" = '1' AND "users"."activated_at" IS NULL)def show(self, request: Request):
age = request.input('age')
article = Article.where('active', 1)
if age >= 21:
article.where('age_restricted', 1)def show(self, request: Request):
age = request.input('age')
article = Article.where('active', 1).when(age >= 21, lambda q: q.where('age_restricted', 1))builder.table('users').limit(10).get()builder.table('users').offset(10).get()builder.table('users').limit(10).offset(10).get()builder.table('users').where_between('age', 18, 21).get()builder.table('users').group_by('active').get()builder.table('users').sum('salary').group_by('salary').having('salary').get()builder.table('users').sum('salary').group_by('salary').having('salary', 50000).get()builder.table('users').join('table1', 'table2.id', '=', 'table1.table_id')builder.table('users').left_join('table1', 'table2.id', '=', 'table1.table_id')builder.table('users').right_join('table1', 'table2.id', '=', 'table1.table_id')builder.table('users').increment('status')builder.table('users').decrement('status')builder.table('users').sum('salary').get()builder.table('users').avg('salary').get()builder.table('users').count('salary').get()builder.table('users').max('salary').get()builder.table('users').min('salary').get()builder.table('users').select_raw("COUNT(`username`) as username").where_raw("`username` = 'Joe'").get()for users in builder.table('users').chunk(100):
for user in users:
user #== <User object>builder.table('users').count('salary').to_sql()
#== SELECT COUNT(`users`.`salary`) FROM `users`builder.table('users').count('salary').where('age', 18).to_sql()
#== SELECT COUNT(`users`.`salary`) FROM `users` WHERE `users`.`age` = '?'builder.where('active', 0).update({
'active': 1
})
# UPDATE `users` SET `users`.`active` = 1 where `users`.`active` = 0builder.where('active', 0).delete()