sqlite3.OperationalError:near“”语法错误是什么意思?

2024-04-30 01:59:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建这些表,它会显示以下错误消息:Traceback(最近一次调用last): 文件“D:/Programmieren/Python/PycharmProjects/untitled/晨星.py,第128行 ''') sqlite3.OperationalError:接近“-”:语法错误

cur.execute('''
CREATE TABLE GuVY1(
    id                                          INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
    Ertrag                                      INTEGER,
    Betriebskosten                              INTEGER,
    Bruttobetriebsgewinn                        INTEGER,
    Betriebsausgaben                            INTEGER,
    Forschung und Entwicklung                   INTEGER,
    Vertriebs- und Verwaltungskosten            INTEGER,
    Personalkosten                              INTEGER,
    Abschreibung und Abgrenzungen               INTEGER,
    Sonstige Betriebskosten                     INTEGER,
    Geschäftsaufwand                            INTEGER,
    Betriebseinnahmen vor Zinsen und Steuern    INTEGER,
    Neutrale Erträge                            INTEGER,
    Gewinn vor Einkommenssteuer                 INTEGER,
    Steueraufwand                               INTEGER,
    Nettogewinn für weitere Geschäftstätigkeit  INTEGER,
    Nettogewinn                                 INTEGER,
    Nettogewinn verfügbar für Aktionäre         INTEGER
)
''')

Tags: 文件消息错误integerlasttracebackvor晨星
3条回答

SQLite可能是唯一使用良好的DBMS,它支持multiple forms of escaping空格、符号/字符和关键字:

双引号(ANSI标准,由Oracle/DB2/Postgres/Teradata使用)

cur.execute('''
CREATE TABLE "GuVY1" (
    "id"                                          INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
    "Ertrag"                                      INTEGER,
    "Betriebskosten"                              INTEGER,
    "Bruttobetriebsgewinn"                        INTEGER,
    "Betriebsausgaben"                            INTEGER,
    "Forschung und Entwicklung"                   INTEGER,
    "Vertriebs- und Verwaltungskosten"            INTEGER,
    "Personalkosten"                              INTEGER,
    "Abschreibung und Abgrenzungen"               INTEGER,
    "Sonstige Betriebskosten"                     INTEGER,
    "Geschäftsaufwand"                            INTEGER,
    "Betriebseinnahmen vor Zinsen und Steuern"    INTEGER,
    "Neutrale Erträge"                            INTEGER,
    "Gewinn vor Einkommenssteuer"                 INTEGER,
    "Steueraufwand"                               INTEGER,
    "Nettogewinn für weitere Geschäftstätigkeit"  INTEGER,
    "Nettogewinn"                                 INTEGER,
    "Nettogewinn verfügbar für Aktionäre"         INTEGER
)
''')

Backticks(用于MySQL/MariaDB兼容性)

cur.execute('''
CREATE TABLE `GuVY1` (
    `id`                                          INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
    `Ertrag`                                      INTEGER,
    `Betriebskosten`                              INTEGER,
    `Bruttobetriebsgewinn`                        INTEGER,
    `Betriebsausgaben`                            INTEGER,
    `Forschung und Entwicklung`                   INTEGER,
    `Vertriebs- und Verwaltungskosten`            INTEGER,
    `Personalkosten`                              INTEGER,
    `Abschreibung und Abgrenzungen`               INTEGER,
    `Sonstige Betriebskosten`                     INTEGER,
    `Geschäftsaufwand`                            INTEGER,
    `Betriebseinnahmen vor Zinsen und Steuern`    INTEGER,
    `Neutrale Erträge`                            INTEGER,
    `Gewinn vor Einkommenssteuer`                 INTEGER,
    `Steueraufwand`                               INTEGER,
    `Nettogewinn für weitere Geschäftstätigkeit`  INTEGER,
    `Nettogewinn`                                 INTEGER,
    `Nettogewinn verfügbar für Aktionäre`         INTEGER
)
''')

方括号(用于SQL Server/MS访问兼容性)

cur.execute('''
CREATE TABLE [GuVY1] (
    [id]                                          INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
    [Ertrag]                                      INTEGER,
    [Betriebskosten]                              INTEGER,
    [Bruttobetriebsgewinn]                        INTEGER,
    [Betriebsausgaben]                            INTEGER,
    [Forschung und Entwicklung]                   INTEGER,
    [Vertriebs- und Verwaltungskosten]            INTEGER,
    [Personalkosten]                              INTEGER,
    [Abschreibung und Abgrenzungen]               INTEGER,
    [Sonstige Betriebskosten]                     INTEGER,
    [Geschäftsaufwand]                            INTEGER,
    [Betriebseinnahmen vor Zinsen und Steuern]    INTEGER,
    [Neutrale Erträge]                            INTEGER,
    [Gewinn vor Einkommenssteuer]                 INTEGER,
    [Steueraufwand]                               INTEGER,
    [Nettogewinn für weitere Geschäftstätigkeit]  INTEGER,
    [Nettogewinn]                                 INTEGER,
    [Nettogewinn verfügbar für Aktionäre]         INTEGER
)
''')

尽管如此,如上所述,请考虑使用字母数字字符(不是以数字开头)命名表/列标识符,并将下划线作为唯一符号,避免使用DBMS的关键字/保留字。这包括避免各种语言使用重音字符。这样做,你就避免了任何上述逃逸的需要。你知道吗

cur.execute('''
CREATE TABLE GuVY1 (
    id                                          INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
    Ertrag                                      INTEGER,
    Betriebskosten                              INTEGER,
    Bruttobetriebsgewinn                        INTEGER,
    Betriebsausgaben                            INTEGER,
    Forschung_und_Entwicklung                   INTEGER,
    Vertriebs_und_Verwaltungskosten             INTEGER,
    Personalkosten                              INTEGER,
    Abschreibung_und_Abgrenzungen               INTEGER,
    Sonstige_Betriebskosten                     INTEGER,
    Geschäftsaufwand                            INTEGER,
    Betriebseinnahmen_vor_Zinsen_und_Steuern    INTEGER,
    Neutrale_Ertrage                            INTEGER,
    Gewinn_vor_Einkommenssteuer                 INTEGER,
    Steueraufwand                               INTEGER,
    Nettogewinn_fur_weitere_Geschaftstatigkeit  INTEGER,
    Nettogewinn                                 INTEGER,
    Nettogewinn_verfugbar_fur_Aktionare         INTEGER
)
''')

连字符在sql列中不是合法字符,因此需要屏蔽它

Vertriebs- und Verwaltungskosten            INTEGER,

你不能直接在代码中加破折号。相反,请包装每个变量名 在引号中(或删除破折号)。你知道吗

"Vertriebs- und Verwaltungskosten"            INTEGER,

相关问题 更多 >