国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Tornado-08、SQLAlchemy簡單的增刪查改

荊兆峰 / 3461人閱讀

摘要:環境搭建安裝相應的軟件包數據庫用于連接服務器的一個庫連接數據庫從中導入,創建引擎建立與數據庫的連接。使用方法定義的映射類依據一個基類,這個基類是維系類和數據表關系的目錄。應用通常只需要有一個的實例。

SQLAlchemy

1.環境搭建

安裝相應的軟件包

1.mysql數據庫

2.pymysql用于連接MySQL服務器的一個庫

3.sqlalchemy

    $ pip install pymysql
    $ pip install sqlalchemy
2.連接數據庫

從sqlalchemy中導入create_engin,創建引擎建立與數據庫的連接。

from sqlalchemy import create_engine

準備連接數據庫的數據:

HOSTNAME = "127.0.0.1"        # 這里填ip地址
PORT = "3306"                 # 端口號 mysql一般默認為3306
DATABASE = "mydb"             # 數據庫名
USERNAME = "admin"            # 用戶名
PASSWORD = "rootqwe123"       # 用戶登錄密碼

DB_URI的格式:

數據庫類型+數據庫驅動名稱://用戶名:密碼@機器地址:端口號/數據庫名?字符編碼

DB_URI=mysql+pymysql://:@/?charset=utf8

engine = create_engine(DB_URI)

我們可以嘗試著測試一下是否連接上:

print(dir(engine)),當有打印出方法時,表示連接成功。

database_connect.py

from sqlalchemy import create_engine

HOSTNAME = "127.0.0.1" # 這里填ip地址
PORT = "3306"
DATABASE = "mydb"
USERNAME = "admin"
PASSWORD = "Root110qwe"

Db_Uri = "mysql+pymysql://{}:{}@{}/{}?charset=utf8".format(USERNAME,PASSWORD,HOSTNAME,DATABASE)

engine = create_engine(Db_Uri)

if __name__=="__main__":
    print(dir(engine))


3.創建模型 1.聲明映像

對象關系型映射,數據庫中的表與python中的類相對應,創建的類必須繼承自sqlalchemy中的基類。

使用Declarative方法定義的映射類依據一個基類,這個基類是維系類和數據表關系的目錄。

應用通常只需要有一個base的實例。我們通過declarative_base()功能創建一個基類。
在database_connect.py文件中加入下列代碼

from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base(engine)
2.創建會話

定義個session會話對象,使用 sessionmaker初始化一個類對象

from sqlalchemy.orm import sessionmaker
Session = sessionmaker(engine)
session = Session()
3.新建模型

新建一個user模型
新建user_module.py文件

from datetime import datetime
from sqlalchemy import Column,Integer,String,DateTime,Boolean
from database_connect import Base,session

class User(Base):
    __tablename__="user"
    id = Column(Integer,primary_key=True,autoincrement=True)
    username = Column(String(20),nullable=False)
    password = Column(String(100))
    creatime = Column(DateTime,default=datetime.now)
    last_login = Column(DateTime)
    _locked = Column(Boolean,default=Falsem,nullable=False)
    
#---將創建好的user類,映射到數據庫的user表中---

在start.py mian函數最后中加入這一行代碼

Base.metadata.create_all()    

這就是創建好了一個表,我們可以在數據庫中查看一下。

4.增刪查改 1.增加數據
def add_user():
    #添加單個對象
    #person = User(username="lethe",password="212121")
    #session.add(person)

#在start.py中的main函數中執行添加函數
    User().add_user()

    #添加多個對象
    #把add_user中的代碼注釋并添加下列代碼
            session.add_all([User(username="banban", password="1212120"),
                User(username="kuku", password="32321")])
    #提交才會生效,和命令行有區別
    session.commit()

2.查詢數據
#先將前面的User().add_user()注釋掉 否者又會添加相同的數據
def search_user():
    row = session.query(User).all()  # 查詢全部數據
    print(row)

#再在start.py中的main函數后面添加
User().search_user()

#將search_user()里的內容注釋掉 添加下列代碼
row = session.query(User).filter_by(id=1).all()  # 按id查詢
print(row)
row = session.query(User).filter(User.username == "banban").all()  # 按字段查詢
print(row)
print(row[0].locked)  #查詢banban這條信息的locked信息


但其實我們可以在定義user類的時候這么去寫

    @classmethod
    def all(cls):
        return session.query(cls).all()

    @classmethod
    def by_id(cls,id):
        return session.query(cls).filter_by(id=id).all()

    @classmethod
    def by_name(cls,name):
        return session.query(cls).filter_by(username=name).all()

    @property
    def locked(self):
        return self._locked

這樣在只需要調用類方法就行

    print(User.all())
    print(User.by_id(1))
    print(User.by_name("lethe"))
    print(User.by_name("kuku"))
3.更新
def update_user():
    row = session.query(User).filter_by(username="lethe").update({User.password:"1010101"})
    session.commit()
4.刪除
def delete_user():
    row = session.query(User).filter_by(username="banban")[0]  #first
    print(row)
    session.delete(row)
    session.commit()

更新與刪除操作過程與前面類似 這里就不一一贅述了
以上就是sqlalchemy的基本知識。

5.pycharm的圖形化數據庫工具

設置步驟:

點擊view-->點擊Toll Windows -->點擊database

在在pycharm右側找到database,點開它

點+號-->Data Source--> 選擇mysql(我這里是用的mysql,其他數據庫也行)

按要求填寫對應的項-->點擊Test connection 測試一下是否能成功連接(如果這個按鈕是灰色的需要先點擊左下角的按鈕安裝插件)


6.附錄

start.py

import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
from user_module import User
from tornado.options import define, options
from database_connect import  engine, session
from user_module import Base
define("port", default=9000, help="run port", type=int)


if __name__ == "__main__":
    connection = engine.connect()
    result = connection.execute("select 1")
    print(Base)
    Base.metadata.create_all()  # 建表
    User().add_user()
    # User().search_user()
    # User().update_user()
    # User().delete_user()
    print(User.all())
    print(User.by_id(1))
    print(User.by_name("lethe"))
    print(User.by_name("kuku"))

database_connect.py

from sqlalchemy import create_engine

HOSTNAME = "127.0.0.1"  # 指的是linux的ip 因為代碼運行在linux上
POST = "3306"  # 直接在linux上連接數據庫不需要端口轉發
DATABASE = "mydb_test"
USERNAME = "admin"  # 登錄的用戶
PASSWORD = "Root110qwe"

db_url = "mysql+pymysql://{}:{}@{}:{}/{}".format(
    USERNAME,
    PASSWORD,
    HOSTNAME,
    POST,
    DATABASE
)  # +號兩邊不能加空格  這里出現了點問題 將這個字符串重新寫過后就可以了

engine = create_engine(db_url)  # 創建引擎

from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base(engine)
# print(result.fetchone())


from sqlalchemy.orm import sessionmaker
Session = sessionmaker(engine)
session = Session()

user_module.py

from datetime import datetime
from sqlalchemy import Column, Integer, String, DateTime, Boolean
from database_connect import Base, session  # 模塊名灰色代表還沒有被調用


class User(Base):  # 繼承Base這個引擎 新建表
    __tablename__ = "user"  # 表名
    id = Column(Integer, primary_key=True, autoincrement=True)
    username = Column(String(20), nullable=False)
    password = Column(String(50))
    email = Column(String(50))
    phone_number = Column(String(20))
    id_card = Column(String(30))
    createtime = Column(DateTime, default=datetime.now)
    _locked = Column(Boolean, default=False, nullable=True)

    @classmethod
    def all(cls):  # 類方法
        return session.query(cls).all()

    @classmethod
    def by_id(cls, id):
        return session.query(cls).filter_by(id=id).all()

    @classmethod
    def by_name(cls, name):
        return session.query(cls).filter_by(username=name).all()

    @property
    def locked(self):
        return self._locked

    def __repr__(self):
        return "" % (
                self.id,
                self.username,
                self.password,
                self.email,
                self.phone_number,
                self.id_card,
                self.createtime,
                self._locked
        )

    def add_user(self):
        # 添加單個對象
        # person = User(username="lethe",password="212121")
        # session.add(person)

        # 添加多個對象
        session.add_all([User(username="banban", password="1212120"),
                         User(username="kuku", password="32321")])
        # 提交才會生效,和命令行有區別
        session.commit()

    def search_user(self):
        # row = session.query(User).all()
        # print(row)
        row = session.query(User).filter_by(id=1).all()
        print(row)
        row = session.query(User).filter(User.username == "banban").all()
        print(row)
        print(row[0].locked)

    def update_user():
        row = session.query(User).filter_by(username="lethe").update({User.password: "1010101"})
        session.commit()


    def delete_user():
        row = session.query(User).filter_by(username="banban")[0]  # first
        print(row)
        session.delete(row)
        session.commit()

將上面的這些程序放在同一目錄下 然后運行start.py


再去ubuntu里面的mysql看一下這張表



文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/44662.html

相關文章

  • 后端API從入門到放棄指北

    摘要:菜鳥教程框架中文手冊入門目標使用搭建通過對數據增刪查改沒了純粹占行用的拜 后端API入門學習指北 了解一下一下概念. RESTful API標準] 所有的API都遵循[RESTful API標準]. 建議大家都簡單了解一下HTTP協議和RESTful API相關資料. 阮一峰:理解RESTful架構 阮一峰:RESTful API 設計指南 RESTful API指南 依賴注入 D...

    Jeffrrey 評論0 收藏0
  • 后端API從入門到放棄指北

    摘要:菜鳥教程框架中文手冊入門目標使用搭建通過對數據增刪查改沒了純粹占行用的拜 后端API入門學習指北 了解一下一下概念. RESTful API標準] 所有的API都遵循[RESTful API標準]. 建議大家都簡單了解一下HTTP協議和RESTful API相關資料. 阮一峰:理解RESTful架構 阮一峰:RESTful API 設計指南 RESTful API指南 依賴注入 D...

    sf190404 評論0 收藏0
  • 后端API從入門到放棄指北

    摘要:菜鳥教程框架中文手冊入門目標使用搭建通過對數據增刪查改沒了純粹占行用的拜 后端API入門學習指北 了解一下一下概念. RESTful API標準] 所有的API都遵循[RESTful API標準]. 建議大家都簡單了解一下HTTP協議和RESTful API相關資料. 阮一峰:理解RESTful架構 阮一峰:RESTful API 設計指南 RESTful API指南 依賴注入 D...

    Airmusic 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<