教大家使用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是用戶名 pass密碼 test數(shù)據(jù)庫
session相當(dāng)于MySQLdb里面的游標(biāo)
first 相當(dāng)于fetchone
echo=True 會輸出所有的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ù)庫 :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類不能改變數(shù)據(jù)庫結(jié)構(gòu),只能用sql語句或刪除表再創(chuàng)建來修改數(shù)據(jù)庫結(jié)構(gòu)
sqlalchemy.types里面有所有的數(shù)據(jù)字段類型,等于sql類型的大寫
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.查詢
query = session.query(User) print query # 只顯示sql語句,不會執(zhí)行查詢 print query[0] # 執(zhí)行查詢 print query.all() # 執(zhí)行查詢 print query.first() # 執(zhí)行查詢 for user in query: # 執(zhí)行查詢 print user.user_name
如果字段的類型是數(shù)字型,查詢出來的type也是數(shù)字型的,不是字符串
高級一點(diǎn)的查詢:
# 篩選 user = query.get(1) # 根據(jù)主鍵獲取 print query.filter(User.user_name == 2) # 只顯示sql語句,不會執(zhí)行查詢 print query.filter(User.user_name == 'lujianxing').all() # 執(zhí)行查詢 print query.filter(User.user_name == 'lujianxing', User.accout == 1245678, User.age > 10).all() # 執(zhí)行查詢 print query.filter(User.user_name == 'lujianxing').filter(User.accout == 1245678).all() print query.filter("user_name = 'lujianxing'").all() # 執(zhí)行查詢 print query.filter("user_name = 'lujianxing' and accout=1245678").all() # 執(zhí)行查詢 query2 = session.query(User.user_name) # 返回的結(jié)果不是User的實(shí)例,而是元組 print query2.all() # 執(zhí)行查詢 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() # 聚合查詢 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ù)庫支持 print session.query(func.current_timestamp()).scalar() print session.query(func.md5(User.name)).filter(User.id == 1).scalar()
以上就是關(guān)于Python SqlAlchemy的使用方法介紹,希望對大家的學(xué)習(xí)有所幫助。
相關(guān)文章
Python中使用pprint函數(shù)進(jìn)行格式化輸出的教程
這篇文章主要介紹了Python中使用pprint函數(shù)進(jìn)行格式化輸出的教程,包括能夠控制輸出寬度等非常有用的特性,需要的朋友可以參考下2015-04-04django celery redis使用具體實(shí)踐
這篇文章主要介紹了django celery redis使用具體實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04Python中強(qiáng)大的函數(shù)map?filter?reduce使用詳解
Python是一門功能豐富的編程語言,提供了許多內(nèi)置函數(shù),以簡化各種編程任務(wù),在Python中,map(),filter()和reduce()是一組非常有用的函數(shù),它們允許對可迭代對象進(jìn)行操作,從而實(shí)現(xiàn)數(shù)據(jù)轉(zhuǎn)換、篩選和累積等操作,本文將詳細(xì)介紹這三個(gè)函數(shù),包括它們的基本用法和示例代碼2023-11-11Python實(shí)現(xiàn)計(jì)算長方形面積(帶參數(shù)函數(shù)demo)
今天小編就為大家分享一篇Python實(shí)現(xiàn)計(jì)算長方形面積(帶參數(shù)函數(shù)demo),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01python一行sql太長折成多行并且有多個(gè)參數(shù)的方法
今天小編就為大家分享一篇python一行sql太長折成多行并且有多個(gè)參數(shù)的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07Selenium Webdriver元素定位的八種常用方式(小結(jié))
這篇文章主要介紹了Selenium Webdriver元素定位的八種常用方式(小結(jié)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01