python-3.x - sqlalchmey orm 中的 crud 函数
问题描述
所以我试图在我的代码上实现 CRUD 函数,所以我试图先创建一个会话,但它一直给我一个错误“引擎未定义”所以我试图定义它,但我一直收到同样的错误。该代码正在使用 sqlalchemy ORM 创建一个数据库 3 个表(用户、帐户、位置)。我究竟做错了什么?
from sqlalchemy import create_engine, Column, Integer, Boolean, String, ForeignKey, DateTime
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship
from sqlalchemy.orm import sessionmaker
from sqlalchemy.orm.query.Query
Session = sessionmaker(bind=engine)
Base = declarative_base()
class User(Base):
__tablename__ = "user"
id = Column('id',Integer,primary_key=True , autoincrement=True)
username = Column('username',String , unique=True)
admin = Column('admin',Boolean )
password = Column('password' , String)
email = Column('email' , String , unique=True)
p_id = Column(Integer , ForeignKey('place.id'))
googleassist = Column('googleassist' , String)
account = relationship("Account", ## Cascade to delete associated account
back_populates='user', ## if that user was deleted.
cascade='all, delete-orphan')
class Account(Base):
__tablename__ = "account"
id = Column('id', Integer,primary_key=True,autoincrement=True)
user_id = Column(Integer , ForeignKey('user.id'))
class Place(Base):
__tablename__ = "place"
id = Column('id', Integer,primary_key=True,autoincrement=True)
p_location = Column('p_location' , String)
h_id = Column('h_id',Integer)
Session.configure(bind=engine)
engine = create_engine('sqlite:///withServer.db')
Base.metadata.create_all(engine)
session = Session(engine)
#creating objects
u1=User( id = '1' ,
username = 'ali',
admin = '1',
password = 'pass',
email = 'haifa@gmail.com'
)
session.add(u1)
session.commit()
#update
i = session.query(User)
i.password = 'passtoo'
session.add(i)
session.commit()
#delete
i = session.query(Account).filter(Account.id == '1').one()
session.delete(i)
session.commit()
解决方案
事实上,你只是使用engine
而不先定义它:
Session = sessionmaker(bind=engine)
你需要engine
在那一行之前有你的定义。移动
engine = create_engine('sqlite:///withServer.db')
在第一次使用engine
.
推荐阅读
- java - 无法从电子邮件中读取自定义标题
- flutter - 如何在小部件构建之前获取共享偏好数据?
- arduino-ide - 如何在 WiFi softAP() 中设置 DHCP IP 地址租用范围?
- elixir - Ecto 寻找 field_id 而不是 field
- rabbitmq - Publisher 在 Rabbitmq 中确认的确切内容是什么?
- php - 重定向页面无法正常工作 - 获取数据并重定向
- python-3.x - 使用深度学习的小目标检测
- java - Keycloak:验证用 JAVA 编写的 Rest API
- webkitspeechrecognition - 如何在不请求麦克风许可的情况下重新启动 webkitSpeechRecognition?
- android - 如何使用新的 `dagger-android` 将活动传递给 dagger 模块