教大家使用Python SqlAlchemy
本文實(shí)例解析Python SqlAlchemy的使用方法,分享給大家供大家參考,具體內(nèi)容如下
1.初始化連接
from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker engine = create_engine('mysql://pass@localhost/test'echo=True) DBSession = sessionmaker(bind=engine) session = DBSession() ret=session.execute('desc user') print ret # print ret.fetchall() print ret.first()
mysql://root:pass/test
root是用戶(hù)名 pass密碼 test數(shù)據(jù)庫(kù)
session相當(dāng)于MySQLdb里面的游標(biāo)
first 相當(dāng)于fetchone
echo=True 會(huì)輸出所有的sql
2.創(chuàng)建表
from sqlalchemy import Column from sqlalchemy.types import * from sqlalchemy.ext.declarative import declarative_base BaseModel = declarative_base() from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker engine = create_engine('mysql://root:Hs2BitqLYKoruZJbT8SV@localhost/test') DBSession = sessionmaker(bind=engine) class User(BaseModel): __tablename__ = 'user1' # 表名 user_name = Column(CHAR(30), primary_key=True) pwd = Column(VARCHAR(20), default='aaa', nullable=False) age = Column(SMALLINT(), server_default='12') accout = Column(INT()) birthday = Column(TIMESTAMP()) article = Column(TEXT()) height = Column(FLOAT()) def init_db(): ''' 初始化數(shù)據(jù)庫(kù) :return: ''' BaseModel.metadata.create_all(engine) def drop_db(): ''' 刪除所有數(shù)據(jù)表 :return: ''' BaseModel.metadata.drop_all(engine) drop_db() init_db()
和django的 ORM一樣 一旦表被創(chuàng)建了,修改User類(lèi)不能改變數(shù)據(jù)庫(kù)結(jié)構(gòu),只能用sql語(yǔ)句或刪除表再創(chuàng)建來(lái)修改數(shù)據(jù)庫(kù)結(jié)構(gòu)
sqlalchemy.types里面有所有的數(shù)據(jù)字段類(lèi)型,等于sql類(lèi)型的大寫(xiě)
default參數(shù)是插入數(shù)據(jù)的時(shí)候,sqlalchemy自己處理的,server_default才是讓mysql處理的
3.添加記錄
user1=User(user_name='lujianxing',accout=1245678) session.add(user1) session.commit()
要commit才能起作用
4.更新記錄
1).更新單條記錄
query = session.query(User) user = query.get('lujianxing11') print user.accout user.accout='987' session.flush()
2).更新多條記錄
query = session.query(User) query.filter(User.user_name=='lujianxing2').update({User.age: '15'}) query.filter(User.user_name=='lujianxing2').update({'age': '16'}) query.filter(User.pwd=='aaa').update({'age': '17'})
5.刪除記錄
query = session.query(User) user = query.get('lujianxing11') session.delete(user) session.flush()
6.查詢(xún)
query = session.query(User) print query # 只顯示sql語(yǔ)句,不會(huì)執(zhí)行查詢(xún) print query[0] # 執(zhí)行查詢(xún) print query.all() # 執(zhí)行查詢(xún) print query.first() # 執(zhí)行查詢(xún) for user in query: # 執(zhí)行查詢(xún) print user.user_name
如果字段的類(lèi)型是數(shù)字型,查詢(xún)出來(lái)的type也是數(shù)字型的,不是字符串
高級(jí)一點(diǎn)的查詢(xún):
# 篩選 user = query.get(1) # 根據(jù)主鍵獲取 print query.filter(User.user_name == 2) # 只顯示sql語(yǔ)句,不會(huì)執(zhí)行查詢(xún) print query.filter(User.user_name == 'lujianxing').all() # 執(zhí)行查詢(xún) print query.filter(User.user_name == 'lujianxing', User.accout == 1245678, User.age > 10).all() # 執(zhí)行查詢(xún) print query.filter(User.user_name == 'lujianxing').filter(User.accout == 1245678).all() print query.filter("user_name = 'lujianxing'").all() # 執(zhí)行查詢(xún) print query.filter("user_name = 'lujianxing' and accout=1245678").all() # 執(zhí)行查詢(xún) query2 = session.query(User.user_name) # 返回的結(jié)果不是User的實(shí)例,而是元組 print query2.all() # 執(zhí)行查詢(xún) print query2.offset(1).limit(1).all() # 等于 limit 1,1 # 排序 print query2.order_by(User.user_name).all() print query2.order_by('user_name').all() print query2.order_by(User.user_name.desc()).all() print query2.order_by(User.user_name, User.accout.desc()).all() print query2.filter("user_name = 'lujianxing' and accout=1245678").count() # 聚合查詢(xún) print session.query(func.count('*')).select_from(User).scalar() print session.query(func.count('1')).select_from(User).scalar() print session.query(func.count(User.id)).scalar() print session.query(func.count('*')).filter(User.id > 0).scalar() # filter() 中包含 User,因此不需要指定表 print session.query(func.count('*')).filter(User.name == 'a').limit(1).scalar() == 1 # 可以用 limit() 限制 count() 的返回?cái)?shù) print session.query(func.sum(User.id)).scalar() print session.query(func.now()).scalar() # func 后可以跟任意函數(shù)名,只要該數(shù)據(jù)庫(kù)支持 print session.query(func.current_timestamp()).scalar() print session.query(func.md5(User.name)).filter(User.id == 1).scalar()
以上就是關(guān)于Python SqlAlchemy的使用方法介紹,希望對(duì)大家的學(xué)習(xí)有所幫助。
相關(guān)文章
基于python實(shí)現(xiàn)簡(jiǎn)單日歷
這篇文章主要為大家詳細(xì)介紹了基于python實(shí)現(xiàn)簡(jiǎn)單日歷,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07Python中使用pprint函數(shù)進(jìn)行格式化輸出的教程
這篇文章主要介紹了Python中使用pprint函數(shù)進(jìn)行格式化輸出的教程,包括能夠控制輸出寬度等非常有用的特性,需要的朋友可以參考下2015-04-04django celery redis使用具體實(shí)踐
這篇文章主要介紹了django celery redis使用具體實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04Python中強(qiáng)大的函數(shù)map?filter?reduce使用詳解
Python是一門(mén)功能豐富的編程語(yǔ)言,提供了許多內(nèi)置函數(shù),以簡(jiǎn)化各種編程任務(wù),在Python中,map(),filter()和reduce()是一組非常有用的函數(shù),它們?cè)试S對(duì)可迭代對(duì)象進(jìn)行操作,從而實(shí)現(xiàn)數(shù)據(jù)轉(zhuǎn)換、篩選和累積等操作,本文將詳細(xì)介紹這三個(gè)函數(shù),包括它們的基本用法和示例代碼2023-11-11Python實(shí)現(xiàn)計(jì)算長(zhǎng)方形面積(帶參數(shù)函數(shù)demo)
今天小編就為大家分享一篇Python實(shí)現(xiàn)計(jì)算長(zhǎng)方形面積(帶參數(shù)函數(shù)demo),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01python一行sql太長(zhǎng)折成多行并且有多個(gè)參數(shù)的方法
今天小編就為大家分享一篇python一行sql太長(zhǎng)折成多行并且有多個(gè)參數(shù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07Selenium Webdriver元素定位的八種常用方式(小結(jié))
這篇文章主要介紹了Selenium Webdriver元素定位的八種常用方式(小結(jié)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01