需求:写一段python代码用来生产一个创建表的sql语句,其中传入的参数有:表名,字段名,字段的类型,字段的长度(如果是varchar类型),是否非空,是否是主键。

可以创建一个名为create_table_sql.py的文件,代码示例:

def generate_create_table_sql(table_name, columns):
    # table_name: str, the name of the table
    # columns: list of tuples, each tuple contains (column_name, data_type, length, not_null, primary_key)
    columns_sql = []
    for column in columns:
        column_name = column[0]
        data_type = column[1]
        length = column[2]
        not_null = "NOT NULL" if column[3] else ""
        primary_key = "PRIMARY KEY" if column[4] else ""
        if data_type == "varchar":
            column_sql = f"{column_name} {data_type}({length}) {not_null} {primary_key}"
        else:
            column_sql = f"{column_name} {data_type} {not_null} {primary_key}"
        columns_sql.append(column_sql)
    columns_str = ",\n".join(columns_sql)
    return f"CREATE TABLE {table_name} (\n{columns_str}\n);"

在需要使用它的地方导入它,如下所示:

from create_table_sql import generate_create_table_sql

table_name = "my_table"
columns = [
    ("id", "int", None, True, True),
    ("name", "varchar", 50, True, False),
    ("age", "int", None, False, False),
    ("address", "varchar", 100, False, False),
]

create_table_sql = generate_create_table_sql(table_name, columns)
print(create_table_sql)

输出:

CREATE TABLE my_table (
id int NOT NULL PRIMARY KEY,
name varchar(50) NOT NULL,
age int,
address varchar(100)
);

假设要求适用于PostgreSQL数据库,并且建表的时候要检查一下这个表是否存在,如果不存在才建表,可以使用以下代码:

import psycopg2  # 需要安装 psycopg2 包来连接 PostgreSQL 数据库


def generate_create_table_sql(table_name, columns):
    conn = psycopg2.connect(
        dbname="your_database_name",
        user="your_database_user",
        password="your_database_password",
        host="your_database_host",
        port="your_database_port"
    )
    cur = conn.cursor()

    # Check if table exists
    cur.execute(f"SELECT EXISTS (SELECT FROM information_schema.tables WHERE table_name = '{table_name}');")
    table_exists = cur.fetchone()[0]
    if table_exists:
        print(f"Table '{table_name}' already exists. Skipping table creation.")
        return

    # Create table
    columns_sql = []
    for column in columns:
        column_name = column[0]
        data_type = column[1]
        length = column[2]
        not_null = "NOT NULL" if column[3] else ""
        primary_key = "PRIMARY KEY" if column[4] else ""
        if data_type == "varchar":
            column_sql = f"{column_name} {data_type}({length}) {not_null} {primary_key}"
        else:
            column_sql = f"{column_name} {data_type} {not_null} {primary_key}"
        columns_sql.append(column_sql)
    columns_str = ",\n".join(columns_sql)
    create_table_sql = f"CREATE TABLE {table_name} (\n{columns_str}\n);"
    cur.execute(create_table_sql)
    conn.commit()

    print(f"Table '{table_name}' created successfully.")
    cur.close()
    conn.close()