Python中sqlalchemy+click

最近在学习sqlalchemy和click,就想有没有办法将这两个库联合起来做个model。最终我实现了在命令行中用自己的定义的命令对mysql进行操作。 虽然听起来舍近求远,傻傻的,直接用sql不行就行了嘛,没啥实用价值。但纯粹就是为了来练手嘛!!

直接上代码,安上包,换个数据库id就能运行。

from sqlalchemy import create_engine, Column, String, Integer
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
import click
Base = declarative_base()

engine = create_engine("mysql+pymysql://root:123456@localhost:3306/sql_click_model", echo=True)

Session = sessionmaker(bind=engine)
session = Session()

class Friend(Base):
    __tablename__ = "friend"
    id = Column(Integer, primary_key=True)
    name = Column(String(20), default=None, nullable=False, comment="name")
    phone = Column(String(20), default=None, comment="phone", nullable=False)

    def __repr__(self):
        Name = self.name
        Phone = self.phone
        return f"Friend:name: {Name},phone: {Phone}"

Base.metadata.create_all(engine)

@click.group()
def cli():
    pass

@click.command()
@click.option('--name', prompt="请输入联系人姓名", help='联系人姓名', type=str, required=True)
@click.option('--phone', prompt="请输入联系人电话", help='联系人电话', type=str, required=True)
def Add(name, phone):
    NewFriend = Friend(name=name, phone=phone)
    session.add(NewFriend)
    session.commit()

@click.command()
@click.option('--name', prompt="请输入要删除的联系人姓名", help='联系人姓名', type=str, required=True)
def Delete(name):
    friend = session.query(Friend).filter(Friend.name == name).first()
    session.delete(friend)
    session.commit()

@click.command()
@click.option('--name',  prompt="请输入联系人姓名", help='联系人姓名', type=str, required=True)
@click.option('--phone', prompt="请输入联系人电话", help='联系人电话', type=str, required=True)
def Update(name, phone):
    friend = session.query(Friend).filter(Friend.name == name).first()
    friend.phone = phone
    session.add(friend)
    session.commit()


@click.command()
@click.option('--name',  prompt="请输入联系人姓名", help='联系人姓名', type=str, required=True)
def Find(name):
    friend = session.query(Friend).filter(Friend.name == name).first()
    print(f"用户{name}的手机号为{friend.phone}")

@click.command()
def See_all():
    results = session.execute("""select *from friend;""")
    for result in results:
        print(result)

cli.add_command(Add)
cli.add_command(Delete)
cli.add_command(Update)
cli.add_command(Find)
cli.add_command(See_all)
if __name__ == '__main__':
    cli()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值