Python操作数据库基本操作-sqlalchemy

使用sqlalchemy,不仅要安装sqlalchemy库,还要安装pymysql

连接数据库很简单,使用一行简短的程序即可

from sqlalchemy import create_engine
import pandas as pd

def sqlalchemy_test():
    ENGINE = create_engine("mysql+pymysql://root:zksmysql@127.0.0.1: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类型

Python操作数据库基本操作-sqlalchemy

有如下数据:

该数据有三列,分别对应category、itemname、performtime,其中performtime有一些空字段。

现在目标是将一下数据插入到上述表item中。

Python操作数据库基本操作-sqlalchemy

首先,在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'
    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:zksmysql@127.0.0.1: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

结果如下:

Python操作数据库基本操作-sqlalchemy

二、批量插入记录

读取文件,将每一行数据创建为一个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:zksmysql@127.0.0.1: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()

结果如下:

Python操作数据库基本操作-sqlalchemy

Original: https://www.cnblogs.com/zhaoke271828/p/15390364.html
Author: Viktor_Cullen
Title: Python操作数据库基本操作-sqlalchemy

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/566020/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球