需求描述:
我们有个json字段,存储的数据形如下,现在需要修改love
{"dob":"21","subject":{"love":"programming"}}
- 工程结构
- main.py
from sqlalchemy import Column, String, Integer,create_engine, JSON
from sqlalchemy.orm import declarative_base,sessionmaker
from sqlalchemy import update, func
import os
# Defining the path of database.
BASE_DIR = os.path.dirname(os.path.realpath(__file__))
connection_string = "sqlite:///"+os.path.join(BASE_DIR,
'site.db')
# Create a base class
Base = declarative_base()
# Create a new database engine instance
engine = create_engine(connection_string,
echo=True)
# Creates a session for objects
Session = sessionmaker(bind=engine)
local_session = Session()
# Defining the schema of the table
class User(Base):
__tablename__ = 'users'
id = Column(Integer(),
primary_key=True)
username = Column(String(25),
nullable=False,
unique=True)
info = Column(JSON,
nullable=True)
def __repr__(self):
return f"<User username={self.username}>"
Base.metadata.create_all(engine)
- insertvalue.py
from main import User,local_session
# Store table data to the variable
user1 = User(id=1, username="aditya",
info={'dob': '21', 'subject': {'love':'math'}})
user2 = User(id=2, username="timmy",
info={'dob': '22', 'subject': {'love':'science'}})
user3 = User(id=3, username="sushant",
info={'dob': '23', 'subject': {'love':'programming'}})
# Add data to the session
local_session.add(user1)
local_session.add(user2)
local_session.add(user3)
# Perform the changes to the database.
local_session.commit()
# Retrieve data and print it
result = local_session.query(User).filter_by(id=1).first()
print(result)
数据
- updatejson.py
from sqlalchemy import update, func
from main import local_session,User
# Declare variables
value = 'programming'
id = 1
# Update the JSON column data
update_table = local_session.query(User).filter(User.id == id).update({
'info': func.json_set(
User.info,
"$.subject.love",
value
)
}, synchronize_session='fetch')
# Commit the changes in database
local_session.commit()
数据