所以我是SQL alchemy的新手,想看看如何在列上创建分区,但是我找不到sqlalchemy的任何东西。例如,如果我有以下SQL语法
CREATE TABLE employees (
id INT NOT NULL,
fname VARCHAR(30),
lname VARCHAR(30)
job_code INT NOT NULL,
store_id INT NOT NULL
)
PARTITION BY RANGE (store_id) (
PARTITION p0 VALUES LESS THAN (6),
PARTITION p1 VALUES LESS THAN (11),
PARTITION p2 VALUES LESS THAN (16),
PARTITION p3 VALUES LESS THAN MAXVALUE
);
并且我通过sqlalchemy创建了一个表,如下所示:
class Employee(Base):
__tablename__ = "employee"
__table_args__ = {'mysql_engine': 'InnoDB'}
emp_id = Column(Integer, nullable=False)
fname = Column(String, nullable=False)
lname = Column(String, nullable=False)
job_code = Column(Integer, nullable=False)
store_id = Column(Integer, nullable=False)
如何在上述sqlalchemy代码中实现分区?
您可以使用sqlalchemy执行原始SQL。
from sqlalchemy.ext.declarative import create_engine
connection_string = 'mysql://user:password@host/database'
engine = create_engine(connection_string)
create_partitions = """
ALTER TABLE employee
PARTITION BY RANGE (store_id) (
PARTITION p0 VALUES LESS THAN (6),
PARTITION p1 VALUES LESS THAN (11),
PARTITION p2 VALUES LESS THAN (16),
PARTITION p3 VALUES LESS THAN MAXVALUE
);"""
我假设您正在使用MySQL,如果是这样,则需要确保主键包含用于分区的所有列。否则,请适当更改连接字符串。
edit: Michael Bayer提供了一种在sqlalchemy表定义here中创建分区的解决方案。该解决方案实质上是将分区参数添加到表定义语法中。