首页 > 解决方案 > db:运行sql模式(包含多条语句)

问题描述

我的项目有一个schema.sql包含CREATE TABLE设置我的 sqlite3 数据库的语句,但我似乎无法弄清楚如何从 Racket 运行这个文件。我收到以下错误消息:

; query-exec: multiple statements given
;   value: "CREATE TABLE IF NOT EXISTS pet (\n  id INTEGER PRIMARY KEY,\n  name TEXT NOT NULL,\n  kind TEXT NOT NULL,\n  owner_id REFERENCES owner(id) NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS owner (\n  id INTEGER PRIMARY KEY,\n  name TEXT NOT NULL\n);\n"
; Context:
;  /usr/share/racket/collects/db/private/sqlite3/connection.rkt:208:4 prepare1* method in connection%
;  /usr/share/racket/collects/db/private/sqlite3/connection.rkt:137:4 check-statement method in connection%
;  /usr/share/racket/collects/db/private/sqlite3/connection.rkt:73:4 query1 method in connection%
;  /usr/share/racket/collects/db/private/generic/functions.rkt:217:0 query-exec
;  /home/winston/code/example-db-racket/main.rkt:1:1 [running body]
; [Due to errors, REPL is just module language, requires, and stub definitions]

有没有办法用db包运行多个语句?

主.rkt

#lang racket

(require db)

(define database
  (sqlite3-connect #:database "database.sqlite3" #:mode 'create))

(define schema
  (call-with-input-file "schema.sql" port->string))

(query-exec database schema)

架构.sql

CREATE TABLE IF NOT EXISTS pet (
  id INTEGER PRIMARY KEY,
  name TEXT NOT NULL,
  kind TEXT NOT NULL,
  owner_id REFERENCES owner(id) NOT NULL
);

CREATE TABLE IF NOT EXISTS owner (
  id INTEGER PRIMARY KEY,
  name TEXT NOT NULL
);

标签: databasesqliteracket

解决方案


推荐阅读