14.python與資料庫之mysql:pymysql、sqlalchemy

来源:https://www.cnblogs.com/progor/archive/2018/02/25/8468075.html
-Advertisement-
Play Games

相關內容: 使用pymysql直接操作mysql 創建表 查看表 修改表 刪除表 插入數據 查看數據 修改數據 刪除數據 使用sqlmary操作mysql 創建表 查看表 修改表 刪除表 插入數據 查看數據 修改數據 刪除數據 首發時間:2018-02-24 23:59 【第一次寫那麼長的博文,若有... ...


相關內容:

  • 使用pymysql直接操作mysql
    • 創建表
    • 查看表
    • 修改表
    • 刪除表
    • 插入數據
    • 查看數據
    • 修改數據
    • 刪除數據

     

  • 使用sqlmary操作mysql
    • 創建表
    • 查看表
    • 修改表
    • 刪除表
    • 插入數據
    • 查看數據
    • 修改數據
    • 刪除數據

 

 

首發時間:2018-02-24 23:59

【第一次寫那麼長的博文,若有錯誤,請不吝與我說明】


直接操作mysql:

前提:

  • 首先需要安裝python與mysql交互的庫【PyMySQL 是在 Python3 版本中用於連接 MySQL 伺服器的一個庫】:
    • 安裝模塊:pymysql:
      pip3 install pymysql
      或者在Pycharm中安裝

使用:

  • 首先導入模塊:import pymysql
  • 連接資料庫 :資料庫連接對象 = pymysql.connect("host="localhost",port=3306,user='root',passwd='123456',db='python_test') 【如果需要支持中文,則加上charset=”utf8”】image
  • 創建游標【游標用於執行sql語句和管理查詢到的結果】 :游標對象 = 資料庫連接對象.cursor()
  • 執行sql語句 :游標對象.execute(SQL語句) ,返回值是受影響行數
    • 由於預設開始事務,如果涉及修改、插入,則需要提交:連接對象.commit() ;以及撤銷修改、插入的回滾:連接對象.rollback()
    • executemany是同時執行多條sql語句【以多組參數的格式,executemany(self,query,args)】:
    • image
  • 獲取結果:
    • 獲取一條結果:data = 游標對象.fetchone()

    • 獲取全部結果:data=游標對象.fetchall()

    • 獲取指定數量結果:data=游標對象.fetmany(x)

    • 獲取結果後,就會將對應的結果刪掉,比如fetchone是獲取一條,那麼這一條就會從原來的結果中刪除

    • 游標對象.rowcount()可以獲得執行sql語句後受影響的行數

    • image 
  • 關閉游標: 游標對象.close()
  • 關閉資料庫連接:資料庫連接對象.close()

 

示例:

1.創建連接:

import pymysql

#創建連接
conn=pymysql.connect(host="localhost",port=3306,user="root",passwd="123456",db="python_test")
#創建游標
cursor=conn.cursor()
#..............操作過程
#關閉游標
cursor.close()
#關閉連接
conn.close()

2.執行查詢:

import pymysql

#創建連接
conn=pymysql.connect(host="localhost",port=3306,user="root",passwd="123456",db="python_test",charset="utf8")
#創建游標
cursor=conn.cursor()

cursor.execute("select * from student;")
print(cursor.fetchone())#獲取一條
print(cursor.fetchmany(2))#獲取兩條
print(cursor.fetchall())#獲取結果集合中的全部

#關閉游標
cursor.close()
#關閉連接
conn.close()

3.執行插入、修改、刪除:

import pymysql

#創建連接
conn=pymysql.connect(host="localhost",port=3306,user="root",password="123456",db="python_test",charset="utf8")
#創建游標
cursor=conn.cursor()

print("-----------插入----------------")
cursor.execute("insert into student values ('nazha',2000,'男');")
cursor.execute("select * from student;")
print(cursor.fetchall())
print("-----------插入----------------")
#cursor.executemany(self,query,args)
cursor.executemany("insert into student value(%s,%s,%s);",[('zhangsan',18,''),('lisi',18,'')])
cursor.execute("select * from student;")
print(cursor.fetchall())
print("-----------修改----------------")
cursor.execute("update student set name = 'zhangsan1' where name = 'zhangsan';")
cursor.execute("select * from student;")
print(cursor.fetchall())
print("----------刪除-----------------")
cursor.execute("delete from student where name = 'lisi';")
cursor.execute("select * from student;")
print(cursor.fetchall())
print("---------------------------")

#需要提交才能插入、成功修改、刪除
conn.commit()
#關閉游標
cursor.close()
#關閉連接
conn.close()

結果:

(('lilei', 18, ''), ('hanmeimei', 18, ''), ('huluwa', 18, ''), ('sunwukong', 18, ''), ('baigujing', 3000, ''), ('nazha', 2000, ''))
---------------------------
(('lilei', 18, ''), ('hanmeimei', 18, ''), ('huluwa', 18, ''), ('sunwukong', 18, ''), ('baigujing', 3000, ''), ('nazha', 2000, ''), ('zhangsan', 18, ''), ('lisi', 18, ''))
---------------------------
(('lilei', 18, ''), ('hanmeimei', 18, ''), ('huluwa', 18, ''), ('sunwukong', 18, ''), ('baigujing', 3000, ''), ('nazha', 2000, ''), ('zhangsan1', 18, ''), ('lisi', 18, ''))
---------------------------
(('lilei', 18, ''), ('hanmeimei', 18, ''), ('huluwa', 18, ''), ('sunwukong', 18, ''), ('baigujing', 3000, ''), ('nazha', 2000, ''), ('zhangsan1', 18, ''))
---------------------------

4.設置支持中文【添加charset=”utf8”】:

import pymysql

#創建連接
# conn=pymysql.connect(host="localhost",port=3306,user='root',passwd='123456',db='python_test')
conn=pymysql.connect(host="localhost",port=3306,user='root',passwd='123456',db='python_test',charset="utf8")

#創建游標
cursor = conn.cursor()

effect_row= cursor.execute("select * from student;")


print("執行成功,受影響行數:",effect_row)
print(cursor.fetchall())

conn.commit()

cursor.close()
conn.close()

添加前:

image

添加後:

image

 

 

 

 


使用sqlalchemy操作mysql:

 

介紹:

  • ORM 將資料庫中的表與面向對象語言中的類建立了一種對應關係,【ORM可以說是參照映射來處理數據的模型,比如說:需要創建一個表,可以定義一個類,而這個類存在與表相映射的屬性,那麼可以通過操作這個類來創建一個表
  • sqlmary是一個mysql的ORM

前提:

    • 安裝模塊:pip3 install sqlalchemy

使用:

  • 導入模塊:
    • 導入連接資料庫模塊:from sqlalchemy import create_engine
    • 如果需要創建新表,則需要導入表結構定義模塊:from sqlalchemy.ext.declarative import declarative_base
    • 導入其他相關模塊,主要是映射的類,如欄位映射為Column,如數據類型int映射為Integer,如索引映射為Index,需要什麼導入什麼:from sqlalchemy import Column,Integer,String
    • 映射關係:
      資料庫中 映射 模塊【如果可以從多個模塊處導入,用 | 分隔】【方式太多,可能有漏,但不影響導入】
      Table from sqlalchemy import Table
      int Integer from sqlalchemy.types import Integer
      索引 Index from sqlalchemy import Index
           
      欄位、列 Column from sqlalchemy import Column
      varchar VARCHAR、String from sqlalchemy.types import String    |   from sqlalchemy import String
      外鍵 ForeignKey
      from sqlalchemy import ForeignKey
           
           
  • 連接資料庫:連接對象=create_engine('資料庫類型+資料庫驅動名稱://用戶名:口令@機器地址:埠號/資料庫名',編碼格式,echo)
    • sqlalchemy支持多種API操作模式,可以使用不同的模式來連接操作資料庫:'資料庫類型+資料庫驅動名稱://用戶名:口令@機器地址:埠號/資料庫名'
      • 比如pymsql【py3常用】:mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>
    • 其他參數:
      • echo是否顯示ORM轉成實際sql語句的過程,echo=True為顯
      • encoding為連接時使用的字元集

 

操作:

基本操作:

    • 創建新表
      • 方法一: 使用declarative
        • 1.導入模塊from sqlalchemy.ext.declarative import declarative_base
        • 2.根據需要的元素來導入模塊from sqlalchemy import Column
          • 導入需要的數據類型【註:數據類型在sqlalchemy中也有指向,所以也可以from sqlalchemy import String,Integer,Char】:from sqlalchemy.types import *
        • 3.創建連接,
        • 3.使用declarative_base來獲得一個類對象,此處我定義該對象為Base
        • 定義一個類,繼承declarative_base生成的類對象Base
          • 使用__tablename__來定義表名
          • 使用 列名 = Column(數據類型,其他列屬性…)等類似格式來定義欄位
            • nullable=False 代表這一列不可以為空,index=True 表示在該列創建索
        • 創建表:Base.metadata.create_all(engine)
          from sqlalchemy import create_engine#負責導入連接資料庫的對象
          from sqlalchemy.ext.declarative import declarative_base#負責導入創建表的api
          from sqlalchemy import Column #負責導入列
          from sqlalchemy.types import *#負責導入列類型
          
          #資料庫連接
          engine = create_engine("mysql+pymysql://root:123456@localhost/python_test",encoding ='utf-8',echo=True)
          #方式一:
          Base = declarative_base()
          
          class User(Base):
              __tablename__ = 'user'#表名
              id = Column(Integer,primary_key=True)
              name = Column(String(32))
              password = Column(String(64))
          
          Base.metadata.create_all(engine)

       

      • 方法二:使用Table
        • 1.導入模塊: from sqlalchemy import Table
        • 2.連接資料庫:engine=create_engine(….)
        • 3.獲取meta類,metadata=MetaData(engine)
        • 4.創建Table對象( 比如:t=Table("group" ,metadata,Column("id",Integer,primary_key=True),Column("group_name",String(32)))  )
        • 5.創建表:metadata.create_all()
          from sqlalchemy import create_engine
          from sqlalchemy import Table
          from sqlalchemy import MetaData
          from sqlalchemy import Column
          from sqlalchemy.types import *
          from sqlalchemy.ext.declarative import declarative_base
          
          
          ####下麵的註釋部分可以與上面一句的未註釋的替換
          engine=create_engine("mysql+pymysql://root:123456@localhost/python_test",encoding ='utf-8',echo=True)
          metadata=MetaData(engine) ###  
          # Base=declarative_base()
          
          t=Table(
          "group" ,metadata,#表名
          # "group",Base.metadata,
          Column("id",Integer,primary_key=True),
          Column("group_name",String(32))
          )
          
          metadata.create_all()
          # Base.metadata.create_all(engine)

 

    • 查看表:
      • db_table=Base.metadata.tables#僅有當次運行中繼承了Base而創建的新表
      • db_tables=engine.table_names()#僅有表名
    • 刪除表:Base.metadata.drop_all(engine)
    • 修改表:
      • 直接修改表所對應的類結構是無法修改成功的,
      • 如果需要修改在程式中自定義的表的結構,那麼需要手動修改,手動的方式有很多,比如直接engine.execute(sql語句)。。。。

 

 

 

    • 插入 數據【這裡僅針對使用declarative_base創建的表,對於不是程式中才創建的,可以自己使用declarative_base建一個類來映射之前的表,只要映射一致,就能插入數據】
      • 1.連接資料庫:engine=create_engine(….)
      • 1.導入模塊:from sqlalchemy.orm import sessionmaker
      • 2.獲取session_class類:Session_class=sessionmaker(bind=engine)
      • 3.獲取session對象:s=Session_class()
      • 4.使用s來添加:
        • s.add()
        • s.add_all()
      • 5.提交數據: s.commit()
        from sqlalchemy import create_engine#負責導入連接資料庫的對象
        from sqlalchemy.ext.declarative import declarative_base#負責導入創建表的api
        from sqlalchemy import Column #負責導入列
        from sqlalchemy.types import *#負責導入列類型
        
        #資料庫連接
        engine = create_engine("mysql+pymysql://root:123456@localhost/python_test",encoding ='utf-8',echo=True)
        Base = declarative_base()
        class User(Base):
            __tablename__ = 'user'#表名
            id = Column(Integer,primary_key=True)
            name = Column(String(32))
            password = Column(String(64))
            group = Column(Integer)
        
        Base.metadata.create_all(engine)
        
        
        
        from sqlalchemy.orm import sessionmaker
        obj1=User(name='lisi',password='123456',group=1)
        
        Session=sessionmaker(bind=engine)
        s=Session()
        s.add(obj1)#
        
        users=[User(name='wangwu',password='123456',group=1),
               User(name='zhaoliu', password='123456', group=1),
               User(name='sunqi', password='123456', group=1)
               ]
        s.add_all(users)#
        
        s.commit()

 

 

    • 查找 數據
      • 同樣適用sessionmaker來查找,與插入相同,需要創建session_class對象(我定義為s)
      • 使用s來查找:
        • s.query(表對應類)是相當於select對應表,後面可以跟first()、all()等來獲取結果,也可以加filter、filter_by等來篩選結果
        • 獲取全部 : s.query(表對應類).all() 【返回的是一個結果列表】
        • 查找指定: s.query(表對應類).filter(表對應類.xxx==xxxx)【filter獲取的是結果集,需要使用all(),first()等方法來獲取結果】
        • 查找指定: s.query(表對應類).filter_by(xxx=xxxx)
        • 附:雖然返回值是一個結果集,但這個集合是一個類對象,如果想查看內容,需要在表對應的類中增加__repr__方法
        • 多個篩選條件使用“,”隔開
        • 常見可用篩選條件【User是一個表對應的類】:
          使用filter,filter_by時:
          User.name==’lisi’
          User.name.like(“lisi%”))
          User.name != ’lisi’
          User.name.any()
          or_(篩選條件) 【代表裡面的多個篩選條件以or組合,需要導入:from sqlalchemy import or_】
          and_(篩選條件) 【代表裡面的多個篩選條件以and組合,需要導入:from sqlalchemy import and_】【預設是and】
          in_([篩選條件])  【使用比如User.name.in_(['xiaxia', 'lilei', 'lover'])】
          使用all時,以下是放在query裡面的:
          User.name  [這相當於不使用where的select name from 表]
           
           
        • 連接查詢使用:s.query(表對應類).join(表對應類.xxx==xxxx)
        • 還有group_by,order_by等用法這裡不做講解[什麼時候有空再補吧!]
          from sqlalchemy import create_engine#負責導入連接資料庫的對象
          from sqlalchemy.ext.declarative import declarative_base#負責導入創建表的api
          from sqlalchemy import Column #負責導入列
          from sqlalchemy.types import *#負責導入列類型
          
          #資料庫連接
          engine = create_engine("mysql+pymysql://root:123456@localhost/python_test",encoding ='utf-8')
          Base = declarative_base()
          class User(Base):
              __tablename__ = 'user'#表名
              id = Column(Integer,primary_key=True)
              name = Column(String(32))
              password = Column(String(64))
              group = Column(Integer)
          
              def __repr__(self):
                  return "<id:%s name:%s group:%s>"%(self.id,self.name,self.group)
          Base.metadata.create_all(engine)
          
          
          
          from sqlalchemy.orm import sessionmaker
          obj1=User(name='lisi',password='123456',group=1)
          
          Session=sessionmaker(bind=engine)
          s=Session()
          
          a=s.query(User).all()
          a2=s.query(User).filter(User.name=='lisi').first()
          a3=s.query(User).filter_by(name='lisi').first()
          
          
          
          print(a)
          print(a2)
          print(a3)

 

 

    • 修改 數據:
      • 修改數據的基礎是先查找到數據,查找:row=s.query(X).filter(X.xxx=xxx).first()
      • 使用賦值語句修改 :row.xxx=xxxx
        from sqlalchemy import create_engine#負責導入連接資料庫的對象
        from sqlalchemy.ext.declarative import declarative_base#負責導入創建表的api
        from sqlalchemy import Column #負責導入列
        from sqlalchemy.types import *#負責導入列類型
        
        #資料庫連接
        engine = create_engine("mysql+pymysql://root:123456@localhost/python_test",encoding ='utf-8')
        Base = declarative_base()
        class User(Base):
            __tablename__ = 'user'#表名
            id = Column(Integer,primary_key=True)
            name = Column(String(32))
            password = Column(String(64))
            group = Column(Integer)
        
            def __repr__(self):
                return "<id:%s name:%s group:%s>"%(self.id,self.name,self.group)
        Base.metadata.create_all(engine)
        
        
        
        from sqlalchemy.orm import sessionmaker
        obj1=User(name='lisi',password='123456',group=1)
        
        Session=sessionmaker(bind=engine)
        s=Session()
        
        
        row=s.query(User).filter(User.name=='lisi').first()
        row.name='lisi2'
        s.commit()

 

 

    • 刪除 數據:
      • 刪除數據的基礎是先查找到數據,查找:row=s.query(X).filter(X.xxx=xxx)
      • 使用delete刪除:row.delete()
        # coding: utf-8
        from sqlalchemy import create_engine#負責導入連接資料庫的對象
        from sqlalchemy.ext.declarative import declarative_base#負責導入創建表的api
        from sqlalchemy import Column #負責導入列
        from sqlalchemy.types import *#負責導入列類型
        
        #資料庫連接
        engine = create_engine("mysql+pymysql://root:123456@localhost/python_test",encoding ='utf-8')
        Base = declarative_base()
        class User(Base):
            __tablename__ = 'user'#表名
            id = Column(Integer,primary_key=True)
            name = Column(String(32))
            password = Column(String(64))
            group = Column(Integer)
            def __repr__(self):
                return "<id:%s name:%s group:%s>"%(self.id,self.name,self.group)
        
        Base.metadata.create_all(engine)
        
        
        from sqlalchemy.orm import sessionmaker
        obj1=User(name='lisi',password='123456',group=1)
        
        Session=sessionmaker(bind=engine)
        s=Session()
        
        
        a3=s.query(User).filter_by(name='lisi1')
        a3.delete()
        s.commit()

 

  • 外鍵相關:
    • 外鍵使用foregin_key創建
    • 類中的relationship的作用:幫助ORM獲知他們的外鍵關係,以便ORM使用外鍵獲取相關數據
      • relationship中的backref的用途:relationship使得可以在一個表中定義的relationshop能被兩個表使用,另一個表使用backref來獲取相關信息
      • relationship中的foreign_keys的用途:當有多個relationship時,為了避免ORM混淆多個relationship,特別的標註哪個外鍵是哪個relationship
      • relationship中的secondary的用途:在多對多的關係中,填入的值是中間表,維持兩邊表關係。
    • 一對一的外鍵關係:
      • 1.導入模塊:from sqlalchemy import Foreign_key
      • 2.建立外鍵(如:group = Column(Integer,ForeignKey("group.id")),建立關係(如:group_relation=relationship('Group',backref="g_users")
      • 3.插入數據
      • 4.查詢到一條數據:如row=s.query(User).filter(User.name=='lisi').first()
      • 5.嘗試A表調用關係來獲取B(row.group_relation.group_name),B使用backref來獲取A的數據(row2.g_users)
      • 下麵的實例大概就是“一個開發人員對應一個開發組的關係”
    #負責導入連接資料庫的對象
    from sqlalchemy import create_engine
    from sqlalchemy.ext.declarative import declarative_base#負責導入創建表的api
    from sqlalchemy import Column,ForeignKey #負責導入列
    from sqlalchemy.types import *#負責導入列類型
    from sqlalchemy.orm import relationship
    
    #資料庫連接
    engine = create_engine("mysql+pymysql://root:123456@localhost/python_test",encoding ='utf-8')
    Base = declarative_base()
    
    
    
    class Group(Base):
        __tablename__="group"
        id=Column(Integer,primary_key=True)
        group_name=Column(String(32),nullable=False)
    
        def __repr__(self):
            return "<id:%s group_name:%s>"%(self.id,self.group_name)
    
    class User(Base):
        __tablename__ = 'user'#表名
        id = Column(Integer,primary_key=True)
        name = Column(String(32),nullable=False)
        password = Column(String(64),nullable=False)
        group = Column(Integer,ForeignKey("group.id"))#這裡創建外鍵
    
        group_relation=relationship('Group',backref="g_users")#為ORM指明關係,方便ORM處理,第一個是對應的類
        def __repr__(self):
            return "<id:%s name:%s>"%(self.id,self.name)
    Base.metadata.create_all(engine)
    
    from sqlalchemy.orm import sessionmaker
    # group1=Group(group_name='python')
    # group2=Group(group_name='linux')
    # group3=Group(group_name='AI')
    # user1=User(name='lisi',password='123456',group=1)
    # user2=User(name='zhangsan',password='123456',group=2)
    # user3=User(name='wangwu',password='123456',group=3)
    # user4=User(name='lilei',password='123456',group=3)
    
    
    Session=sessionmaker(bind=engine)
    s=Session()
    # s.add_all([group1,group2,group3,user1,user2,user3,user4])
    # s.commit()
    
    # row=s.query(User).filter(User.name=='lisi').first()
    row=s.query(User).first()
    print(row.group_relation.group_name)#這裡User通過關係來獲取Group的數據
    row2=s.query(Group).first()
    print(row2)
    print(row2.g_users)#這裡Group通過relationship的backref來獲取User的數據
    • 一對多關係,外鍵關聯
      • 以一個老師能做一個班的班主任此外還能做另一個班的副班主任為例【即一個老師能對應多個班級】
      • 一對多關係的創建的核心是relationship中的foreign_keys
      • 附:當你建表成功而插入數據失敗時,可以嘗試先刪除掉數據表,有時候因為外鍵依賴會導致插入失敗
        #負責導入連接資料庫的對象
        from sqlalchemy import create_engine
        from sqlalchemy.ext.declarative import declarative_base#負責導入創建表的api
        from sqlalchemy import Column,ForeignKey #負責導入列
        from sqlalchemy.types import *#負責導入列類型
        from sqlalchemy.orm import relationship
        
        #資料庫連接
        engine = create_engine("mysql+pymysql://root:123456@localhost/python_test",encoding ='utf-8')
        Base = declarative_base()
        
        
        
        class Grade(Base):
            __tablename__="grade"
            id=Column(Integer,primary_key=True)
            grade_name=Column(String(32),nullable=False)
        
            def __repr__(self):
                return "<id:%s group_name:%s>"%(self.id,self.grade_name)
        
        class Teacher(Base):
            __tablename__ = 'teacher'#表名
            id = Column(Integer,primary_key=True)
            name = Column(String(32),nullable=False)
            primary_grade = Column(Integer,ForeignKey("grade.id"))
            seco
        
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、服務 服務提供了一種能在應用的整改生命周期內保持數據的方法,它能夠在控制器之間進行通信,並保持數據的一致性。 1.服務是一個單例對象,在每個應用中只會被實例化一次(被$injector); 2.服務提供了把與特定功能相關連的方法集中在一起的介面,實際中用於封裝通用方法,請求後臺數據,處理數據返回 ...
  • 一、控制器 首先列出幾種我們平常使用控制器時的幾種誤區: 我們知道angualrJs中一個控制器時可以對應不同的視圖模板的,但這種實現方式存在的問題是: 如果視圖1和視圖2根本沒有任何邏輯關係,這樣“控制器”的角色就會很尷尬,因為我們不可能把不同業務的數據模型都綁在同一個控制器中。 這種實現方式也存 ...
  • 一、什麼是反向代理?反向代理的作用? 反向代理(Reverse Proxy)方式是指以代理伺服器來接受internet上的連接請求,然後將請求轉發給內部網路上的伺服器,並將從伺服器上得到的結果返回給internet上請求連接的客戶端,此時代理伺服器對外就表現為一個反向代理伺服器。 當外部客戶機嘗試訪 ...
  • https://files.cnblogs.com/files/tewuapple/mapreduce-osdi04.pdf ...
  • Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 8509 Accepted Submission(s): 4833 Problem Descrip ...
  • 1185 威佐夫游戲 V2 基準時間限制:1 秒 空間限制:131072 KB 分值: 0 難度:基礎題 收藏 關註 1185 威佐夫游戲 V2 基準時間限制:1 秒 空間限制:131072 KB 分值: 0 難度:基礎題 1185 威佐夫游戲 V2 基準時間限制:1 秒 空間限制:131072 K ...
  • (一) 前言 Selenium Grid可以將測試分佈在若幹個物理或虛擬機器上,從而實現分佈方式或並行方式執行測試。 這個鏈接是官方的相關說明。 https://github.com/SeleniumHQ/selenium/wiki/Grid2 (二) Selenium Grid 大概就是這個意思( ...
  • JDK的安裝和配置 學習Java最基礎的就是要先學會安裝jdk(Java Development Kit)啦,今天小R在這裡跟大家分享一下jdk1.8的安裝流程~ 1.複製以下鏈接,打開jdk1.8的具體下載頁 http://www.oracle.com/technetwork/java/javas ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...