sqlalchemy入门

SQLAlchemy基本使用

1.概念

是一种ORM库,十分方便,而且比一般的水平的程序员写的SQL要高效,但它最后还是会转化成相对应的SQL语句。

2.基本使用

1.创建连接

AccountInfoBase = declarative_base()





class AccountInfo(AccountInfoBase):

    __tablename__ = 'user_table'



    id = Column(Integer, primary_key=True)

    real_name = Column(String)

    nick_name = Column(String)

    phone_num = Column(String)

    birth_date = Column(DateTime)





db = dict(

    user='conn',

    pswd='conn',

    host='172.28.249.142',

    port=13357,

    dbname='zhencongpeng_test',

)



engine = create_engine('mysql+pymysql://{user}:{pswd}@'

                       '{host}:{port}/{dbname}?charset'

                       '=utf8'.format(**db))

Session = sessionmaker(bind=engine)

session = Session()

在代码中我们可以看出我们首先是创建了一个类,这个类其实就是对应表的列,然后我们以后所有的操作都是利用session来操作

2.增

myinsert1 = AccountInfo(id=1,real_name='kiki',nick_name='do you love me',phone_num='15913444356',birth_date='2016-09-11 11:11:11')

session.add(myinsert1)

这是单体插入

myinsert1 = AccountInfo(id=13,real_name='kiki',nick_name='do you love me',phone_num='15913444356',birth_date='2016-09-11 11:11:11')

myinsert2 = AccountInfo(id=12, real_name='kiki', nick_name='do you love me', phone_num='15913444356',birth_date='2016-09-11 11:11:11')

mylist = [myinsert1,myinsert2]

session.add_all(mylist)

queryans = session.query(AccountInfo)

for i in queryans:

    print("id=%d,real_name=%s,nick_name=%s,phone_num=%s,birth_date=%s"%(i.id,i.real_name,i.nick_name,i.phone_num,i.birth_date))

这是批量插入

注意:

         若重复插入主键相同的语句会报错,插入后必须commit,不然不会生效

3.查

queryans = session.query(AccountInfo)

for i in queryans:

    print("id=%d,real_name=%s,nick_name=%s,phone_num=%s,birth_date=%s"%(i.id,i.real_name,i.nick_name,i.phone_num,i.birth_date))

这是最基本的查询,相当于select *

queryans = session.query(AccountInfo).filter(AccountInfo.real_name=='jj',AccountInfo.nick_name=='kk')

for i in queryans:

    print("id=%d,real_name=%s,nick_name=%s,phone_num=%s,birth_date=%s" % (

    i.id, i.real_name, i.nick_name, i.phone_num, i.birth_date))

filter相当于sql中的条件语句,当他们都为真的时候才符合条件,不同条件可以用,隔开

4.删

session.query(AccountInfo).filter(AccountInfo.id<10).delete()

queryans = session.query(AccountInfo)

for i in queryans:

    print("id=%d,real_name=%s,nick_name=%s,phone_num=%s,birth_date=%s" % (

    i.id, i.real_name, i.nick_name, i.phone_num, i.birth_date))

其实删除就是查询,把符合条件的都删除,记住要commit

5.改

uuser = session.query(AccountInfo).filter(AccountInfo.id>10)

for i in uuser:

    i.nick_name='kkkkkkkkkkk'

session.commit()

queryans = session.query(AccountInfo)

for i in queryans:

    print("id=%d,real_name=%s,nick_name=%s,phone_num=%s,birth_date=%s" % (

    i.id, i.real_name, i.nick_name, i.phone_num, i.birth_date))

我们查询出来的结果,只要我们对其操作,他都会更新到相对应的数据,可以想象为浅拷贝,所以要谨慎操作

 

 

6.query()操作

label():起别名

limit(n):限制返回条数,默认返回前n条,若原来记录总数<n,则返回全部

all():返回所有结果

one():查询结果当且仅当只有一条的时候不会报错,返回一个对象

first():尝试性取第一条,若结果为空则为None

distinct():相当于在select后加一个distinct,和sql中的distinct一样

order_by(Class.column.desc()/asc()):排序

group_by():单独用的时候可以达到distintc某一列的效果,可和其他函数一起用

count():返回总体的数量

having():通常和group_by一起用,单用的话和filter差不多

 

7.func的一些函数,主要用于统计,配合

1.count():计数

2.sum():

8.原生sql

 session.execute(原生sql)

 

发布了133 篇原创文章 · 获赞 8 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/fbher/article/details/102690158