1. 程式人生 > 其它 >Python操作資料庫基本操作-sqlalchemy

Python操作資料庫基本操作-sqlalchemy

Python、MySQL、資料庫、資料庫連線、插入資料、批量插入資料

使用sqlalchemy,不僅要安裝sqlalchemy庫,還要安裝pymysql

連線資料庫很簡單,使用一行簡短的程式即可

from sqlalchemy import create_engine
import pandas as pd


def sqlalchemy_test():
    ENGINE = create_engine("mysql+pymysql://root:[email protected]:3306/asoul")
    # 查詢2021年9月30日之後的所有item
    sql = """
        select iditem,itemname,performtime from item where performtime>'2021-9-30'
        order by performtime desc
        
""" df = pd.read_sql(sql, ENGINE) print(df) if __name__ == '__main__': sqlalchemy_test()

然後就查詢成功,列印資料框,也可以換成自己的查詢語句進行資料庫連線測試。

關鍵的是插入資料,這裡有如下的資料表

一個int型別自增主鍵,一個DATETIME型別的日期,其他四個String型別

有如下資料:

該資料有三列,分別對應category、itemname、performtime,其中performtime有一些空欄位。

現在目標是將一下資料插入到上述表item中。

首先,在python檔案中定義表Item的對映(建立表):格式如下

from sqlalchemy import create_engine
from sqlalchemy import Column
from sqlalchemy import Integer, String, DateTime
from sqlalchemy.ext.declarative import declarative_bas
import pandas as pd

Base = declarative_base()


class Item(Base):
    __tablename__ = 'item'
    iditem = Column(Integer, primary_key=True)
    category 
= Column(String(32)) itemname = Column(String(64)) idolname = Column(String(16)) performtime = Column(DateTime) linkurl = Column(String(128)) def __repr__(self): return "<Item(category='%s', itemname='%s', idolname='%s', performtime='%s)>" % \ self.category, self.itemname, self.idolname, self.performtime

一、插入單條資料

建立資料庫連線,根據連線初始化Session的引數,然後建立session物件,用session來進行資料記錄的插入,最後提交此次操作:

from sqlalchemy import create_engine
from sqlalchemy import Column
from sqlalchemy import Integer, String, DateTime
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
import pandas as pd

Base = declarative_base()


class Item(Base):
    __tablename__ = 'item'
    iditem = Column(Integer, primary_key=True)
    category = Column(String(32))
    itemname = Column(String(64))
    idolname = Column(String(16))
    performtime = Column(DateTime)
    linkurl = Column(String(128))def insert_into_table():
    ENGINE = create_engine("mysql+pymysql://root:[email protected]:3306/asoul")
    Base.metadata.create_all(ENGINE)
    Session = sessionmaker(bind=ENGINE)
    session = Session()
    session.add(Item(category="", itemname="胡廣生", idolname="珈樂Carol", performtime=None))
    session.add(Item(category="", itemname="七里香", idolname="珈樂Carol", performtime="2021-2-14"))
    session.commit()


if __name__ == '__main__':
    insert_into_table()

這裡插入的兩條記錄,

1. 缺省了自增主鍵,這個會根據資料庫的自增主鍵欄位,自動設定主鍵

2. 缺省了linkurl欄位,這個會在資料庫自動設定為NULL

3. 其中一條記錄的performtime欄位設定為None,這個會自動在資料庫設定為NULL

結果如下:

二、批量插入記錄

讀取檔案,將每一行資料建立為一個Item物件。然後呼叫session的add_all函式一次性全部插入資料庫,對於空欄位需要進行判斷

from sqlalchemy import create_engine
from sqlalchemy import Column
from sqlalchemy import Integer, String, DateTime
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

Base = declarative_base()


class Item(Base):
    __tablename__ = 'item'
    iditem = Column(Integer, primary_key=True)
    category = Column(String(32))
    itemname = Column(String(64))
    idolname = Column(String(16))
    performtime = Column(DateTime)
    linkurl = Column(String(128))


def insert_into_table():
    # 將資料的每一行建立為一個Item物件
    data = []
    with open("temp.csv", encoding='utf-8') as file:
        line = file.readline()
        while line:
            line_s = line.strip("\n").split(',')
            if line_s[2] == '':
                data.append(Item(category=line_s[0], itemname=line_s[1], idolname="珈樂Carol"))
            else:
                data.append(Item(category=line_s[0], itemname=line_s[1], idolname="珈樂Carol", performtime=line_s[2]))
            line = file.readline()

    # 建立連線,建立session,提交資料
    ENGINE = create_engine("mysql+pymysql://root:[email protected]:3306/asoul")
    Base.metadata.create_all(ENGINE)
    Session = sessionmaker(bind=ENGINE)
    session = Session()
    session.add_all(data)
    session.commit()


if __name__ == '__main__':
    insert_into_table()

結果如下: