天天看點

資料分析師:2.1peewee子產品寫入資料庫

初始化資料庫并設計模型

class 模型名稱(Model) -> 一個class就是一張表

from peewee import SqliteDatabase
from peewee import Model
from peewee import CharField,DateField,ForeignKeyField

db = SqliteDatabase('people.db')

class Person(Model):
    name = CharField()
    birthday = DateField()

    class Meta:
        database = db
           

設計兩個表:Person和Pet

from peewee import SqliteDatabase
from peewee import Model
from peewee import CharField,DateField,ForeignKeyField

db = SqliteDatabase('people.db')

class Person(Model):
    name = CharField()
    birthday = DateField()

    class Meta:
        database = db

class Pet(Model):
    owner = ForeignKeyField(Person,backref='pets')
    name = CharField()
    animal_type = CharField()

    class Meta:
        database = db

           

生成資料庫檔案

db.connect() -> 連接配接資料庫

db.create_tables([類1, 類2, …]) -> 建立表

from peewee import SqliteDatabase
from peewee import Model
from peewee import CharField,DateField,ForeignKeyField

db = SqliteDatabase('people.db')

class Person(Model):
    name = CharField()
    birthday = DateField()

    class Meta:
        database = db

class Pet(Model):
    owner = ForeignKeyField(Person,backref='pets')
    name = CharField()
    animal_type = CharField()

    class Meta:
        database = db
db.connect()
db.create_tables([Person,Pet])

           

添加資料

執行個體化一個類,然後.save()

from peewee import SqliteDatabase
from peewee import Model
from peewee import CharField,DateField,ForeignKeyField
from datetime import date

db = SqliteDatabase('people.db')

class Person(Model):
    name = CharField()
    birthday = DateField()

    class Meta:
        database = db

class Pet(Model):
    owner = ForeignKeyField(Person,backref='pets')
    name = CharField()
    animal_type = CharField()

    class Meta:
        database = db
# db.connect()
# db.create_tables([Person,Pet])

uncle_bob = Person(name='Bob', birthday=date(1960, 1, 15))
uncle_bob.save()
           

直接使用類的.create()方法,不用再save()

from peewee import SqliteDatabase
from peewee import Model
from peewee import CharField,DateField,ForeignKeyField
from datetime import date

db = SqliteDatabase('people.db')

class Person(Model):
    name = CharField()
    birthday = DateField()

    class Meta:
        database = db

class Pet(Model):
    owner = ForeignKeyField(Person,backref='pets')
    name = CharField()
    animal_type = CharField()

    class Meta:
        database = db
# db.connect()
# db.create_tables([Person,Pet])

# uncle_bob = Person(name='Bob', birthday=date(1960, 1, 15))
# uncle_bob.save()

sam = Person.create(name='Sam', birthday=date(1970, 2, 25))
           

擷取一條資料,如果沒有就添加一條資料

. get_or_create()

傳回一個執行個體以及是否有建立新資料

from peewee import SqliteDatabase
from peewee import Model
from peewee import CharField,DateField,ForeignKeyField
from datetime import date

db = SqliteDatabase('people.db')

class Person(Model):
    name = CharField()
    birthday = DateField()

    class Meta:
        database = db

class Pet(Model):
    owner = ForeignKeyField(Person,backref='pets')
    name = CharField()
    animal_type = CharField()

    class Meta:
        database = db
# db.connect()
# db.create_tables([Person,Pet])

# uncle_bob = Person(name='Bob', birthday=date(1960, 1, 15))
# uncle_bob.save()
# sam = Person.create(name='Sam', birthday=date(1970, 2, 25))
user,created = Person.get_or_create(name = 'Sam')
print(user.name, user.birthday, created)
           

輸出結果:

user,created = Person.get_or_create(name = 'Kate', birthday=date(1980,2,2))
print(user.name, user.birthday, created)
           

輸出結果:

修改資料

擷取一個執行個體并修改,用.save()儲存

from peewee import SqliteDatabase
from peewee import Model
from peewee import CharField,DateField,ForeignKeyField
from datetime import date

db = SqliteDatabase('people.db')

class Person(Model):
    name = CharField()
    birthday = DateField()

    class Meta:
        database = db

class Pet(Model):
    owner = ForeignKeyField(Person,backref='pets')
    name = CharField()
    animal_type = CharField()

    class Meta:
        database = db
# db.connect()
# db.create_tables([Person,Pet])

# uncle_bob = Person(name='Bob', birthday=date(1960, 1, 15))
# uncle_bob.save()
# sam = Person.create(name='Sam', birthday=date(1970, 2, 25))
# user,created = Person.get_or_create(name = 'Kate', birthday=date(1980,2,2))
# print(user.name, user.birthday, created)
uncle_bob = Person.get(name='Bob')
uncle_bob.birthday = date(1961, 1, 15)
uncle_bob.save()

           

正确的原位修改方法

query = Person.update(name='Mr.' + Person.name)
query.execute()
           

删除一條資料

Kate = Person.get(Person.name.endswith('Kate'))
Kate.delete_instance()
           

删除多條資料

from peewee import SqliteDatabase
from peewee import Model
from peewee import CharField,DateField,ForeignKeyField
from datetime import date

db = SqliteDatabase('people.db')

class Person(Model):
    name = CharField()
    birthday = DateField()

    class Meta:
        database = db

class Pet(Model):
    owner = ForeignKeyField(Person,backref='pets')
    name = CharField()
    animal_type = CharField()

    class Meta:
        database = db
# db.connect()
# db.create_tables([Person,Pet])

# uncle_bob = Person(name='Bob', birthday=date(1960, 1, 15))
# uncle_bob.save()
# sam = Person.create(name='Sam', birthday=date(1970, 2, 25))
# user,created = Person.get_or_create(name = 'Kate', birthday=date(1980,2,2))
# print(user.name, user.birthday, created)
# uncle_bob = Person.get(name='Bob')
# uncle_bob.birthday = date(1961, 1, 15)
# uncle_bob.save()
# query = Person.update(name='Mr.' + Person.name)
# query.execute()
# Kate = Person.get(Person.name.endswith('Kate'))
# Kate.delete_instance()
query = Person.delete().where(Person.name.endswith('Bob'))
query.execute()