我正在尝试创建这些表,它给了我以下错误消息:Traceback(最近一次通话): 文件“ D:/Programmieren/Python/PycharmProjects/untitled/Morningstar.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
)
''')
答案 0 :(得分:0)
连字符不是sql列中的合法字符,因此需要屏蔽
答案 1 :(得分:0)
Vertriebs- und Verwaltungskosten INTEGER,
您不能在代码中直接加上破折号。而是包装每个变量名称 用引号引起来(或删除破折号)。
"Vertriebs- und Verwaltungskosten" INTEGER,
答案 2 :(得分:0)
SQLite也许是唯一支持multiple forms of escaping空间,符号/字符和关键字的使用良好的DBMS:
双引号 (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
)
''')
反引号 (用于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 Access兼容性)
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
)
''')