2024年06月18日 sqlalchemy 主键自增 极客笔记
在数据库中,主键是用于唯一标识每条记录的字段。在很多情况下,我们希望主键是自增的,即每次插入一条新的记录时,主键都会自动递增。在sqlalchemy中,我们可以通过设置主键的autoincrement
属性来实现主键的自增功能。
sqlalchemy是一个Python的ORM(Object Relational Mapping)框架,它提供了一种抽象的方式来操作数据库,使得数据库操作更加方便,同时也提供了一些高级的功能,如事务管理,连接池等。
在sqlalchemy中,我们可以使用sqlalchemy.schema.Column
来定义主键字段,并且通过设置autoincrement=True
来使其自增。下面是一个示例代码:
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String)
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()
user1 = User(name='Alice')
session.add(user1)
session.commit()
users = session.query(User).all()
for user in users:
print(user.id, user.name)
在上面的代码中,我们定义了一个User
类,其中id
字段是主键,并且设置了autoincrement=True
。然后我们创建了一个数据库引擎,并通过sessionmaker
来创建一个session
实例,便于后续的数据库操作。接着我们创建了一个用户对象user1
,并插入到数据库中。
运行以上代码,输出如下:
1 Alice
可以看到,id字段已经自动递增并且成功插入了一条数据。
有时候我们想设置主键自增的起始值和步长,可以通过设置default
和autoincrement
的值来实现。下面是一个示例代码:
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True, autoincrement=True, default=1001)
name = Column(String)
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()
user1 = User(name='Bob')
session.add(user1)
session.commit()
users = session.query(User).all()
for user in users:
print(user.id, user.name)
在上面的代码中,我们将id
的autoincrement
设置为True,并且设置默认值为1001。运行以上代码,输出如下:
1001 Bob
可以看到,id字段起始值为1001,并且成功插入了一条数据。
有时候我们可能会有多个表需要使用自增主键,sqlalchemy可以很方便地处理这种情况。下面是一个示例代码:
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String)
class Product(Base):
__tablename__ = 'products'
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String)
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()
user1 = User(name='Alice')
session.add(user1)
product1 = Product(name='Apple')
session.add(product1)
session.commit()
users = session.query(User).all()
for user in users:
print(user.id, user.name)
products = session.query(Product).all()
for product in products:
print(product.id, product.name)
在以上代码中,我们定义了两个表User
和Product
,它们都有一个自增主键字段id
。然后我们分别向两个表中插入了一条数据,最后分别输出了两个表中的数据。
运行以上代码,输出如下:
1 Alice
1 Apple
可以看到,两个表的主键都自动递增并且成功插入了数据。
sqlalchemy提供了很方便的方式来操作数据库,并且支持设置主键自增功能。通过设置字段的autoincrement
属性,我们可以实现主键的自增功能,并且可以灵活地设置起始值和步长。同时,sqlalchemy还可以很方便地处理多表的自增主键。
本文链接:http://so.lmcjl.com/news/6815/