使用构造的 f 字符串在 Python 3 中创建 sqlite db 并接收:sqlite3.OperationalError: near "(": syntax error

问题描述

我正在尝试使用 python 3 中构造的 f 字符串创建 sqlite3 db 表,但是我收到以下错误

sqlite3.OperationalError: near "(": Syntax error

我曾希望我不需要在这里询问语法错误,但我一直在 stackoverflow 以及一般在线搜索以识别问题,但没有成功。 我已经将代码与其他示例进行了比较,同样没有看到构造有任何不同,除了使用 f 字符串似乎并不常见。

我已经阅读了传递参数的利弊,我更喜欢这个 f 字符串,除非它是根本原因。

我希望这个问题可能很明显,但是任何指针都将不胜感激。

完整代码如下:

    import sqlite3
    import pandas as pd
    
    db_path = [PATH TO DATABASE]
    db_table_name = [TABLE NAME]
    header_source = [PATH TO .XLSX]
    
    def ReadHeaders():
    
        df = pd.read_excel(header_source)

        col_list = list(df.columns.values)
    
        prep_col_list = [item.replace(" ","_") for item in col_list]
    
        col_string = " TEXT,_".join(prep_col_list)
    
        final_col_string = col_string.replace("Primary_ID TEXT","Primary_ID PRIMARY KEY")
    
        return final_col_string
    
        
    def Createsqldb():
    
        cols = ReadHeaders()
    
        conn = sqlite3.connect(db_path)

        c = conn.cursor()
    
        c.execute(f""" CREATE TABLE IF NOT EXISTS {db_table_name} ({cols}) """)
    
        conn.commit()

        conn.close()

为表头创建的字符串示例是:

_link TEXT,_Primary_ID PRIMARY KEY,_Status_Description TEXT,_Price_List_Status TEXT,_Brand TEXT,_36_Character_Description TEXT

解决方法

已解决

在分解所有内容后,根本原因是构造的字符串。当我尝试将构造的字符串导出到 .txt 文件并收到 unicode 错误时,我能够识别它。

之前的代码:

return final_col_string

之后的代码:

return final_col_string.encode(encoding="utf-8")

我还添加了一个简单的表格信息检查以进行确认

def ShowTable(c):

    c.execute(f"PRAGMA table_info({db_table_name})")

    print (c.fetchall())

完整的代码包含其他人遇到此问题:

    import sqlite3
    import pandas as pd
    
    db_path = [PATH TO DATABASE]
    db_table_name = [TABLE NAME]
    header_source = [PATH TO .XLSX]
    
    def ReadHeaders():
    
        df = pd.read_excel(header_source)

        col_list = list(df.columns.values)
    
        prep_col_list = [item.replace(" ","_") for item in col_list]
    
        col_string = " TEXT,_".join(prep_col_list)
    
        final_col_string = col_string.replace("Primary_ID TEXT","Primary_ID PRIMARY KEY")
    
        return final_col_string.encode(encoding="utf-8")
    
        
    def CreateSQLdb():
    
        cols = ReadHeaders()
    
        conn = sqlite3.connect(db_path)

        c = conn.cursor()
    
        c.execute(f""" CREATE TABLE IF NOT EXISTS {db_table_name} ({cols}) """)
    
        conn.commit()

        conn.close()

    def ShowTable(c):

        c.execute(f"PRAGMA table_info({db_table_name})")

        print (c.fetchall())


    if __name__ == "__main__":
        CreateSQLdb()

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...