Tệp không phải là cơ sở dữ liệu SQLite Python

Ban đầu, tôi có một dự án (hãy gọi nó là dự án1) được lưu trữ dưới dạng trang web này. Project1 đã hoạt động tốt mà không gặp sự cố nào trên Pythonanywhere hoặc trang web thực tế. Một ngày nọ, có một vấn đề với việc lấy nó từ GitHub nên tôi phải tạo một kho lưu trữ mới giống với project1 (hãy gọi nó là project1_copy) và kéo nó vào trang web. Từ đó rắc rối bắt đầu

Tôi đặt đường dẫn tệp trong trang Ứng dụng web trên Pythonanywhere thành đường dẫn tương ứng từ project1 đến project1_copy. Trang web có vẻ như mọi thứ đều hoạt động tốt nên tôi đã xóa project1 (tôi không nhớ là mình đã kiểm tra các tính năng đăng nhập vào thời điểm này chưa). Từ đó vấn đề cơ sở dữ liệu bắt đầu xảy ra. Tôi đã cố gắng tạo một môi trường ảo mới nhưng không hoạt động. Tôi đã thử tạo một cơ sở dữ liệu mới từ đầu bằng cách sử dụng sqlite3 trong Python, nhưng nó không hoạt động. Tôi đã thử xác minh rằng cơ sở dữ liệu của tôi là sqlite3 với cơ sở dữ liệu sqlite. Các tập tin là tốt, nhưng vẫn không hoạt động

Tôi không chắc liệu có thể có một số thứ khác mà tôi không biết khi thiết lập ứng dụng web trên Pythonanywhere ban đầu có thể gây ra sự cố này hay không, vì vậy tôi nghĩ điều tốt nhất nên làm là xóa ứng dụng web . Bất kỳ suy nghĩ về điều này?

SQLite không thể so sánh trực tiếp với các công cụ cơ sở dữ liệu SQL của máy khách/máy chủ như MySQL, Oracle, PostgreSQL hoặc SQL Server vì SQLite đang cố gắng giải quyết một vấn đề khác

Các công cụ cơ sở dữ liệu SQL của máy khách/máy chủ cố gắng triển khai kho lưu trữ dữ liệu doanh nghiệp được chia sẻ. Họ nhấn mạnh khả năng mở rộng, đồng thời, tập trung và kiểm soát. SQLite cố gắng cung cấp lưu trữ dữ liệu cục bộ cho các ứng dụng và thiết bị riêng lẻ. SQLite nhấn mạnh tính kinh tế, hiệu quả, độ tin cậy, độc lập và đơn giản

SQLite không cạnh tranh với cơ sở dữ liệu máy khách/máy chủ. SQLite cạnh tranh với fopen()

Các tình huống mà SQLite hoạt động tốt

  • Thiết bị nhúng và Internet vạn vật

    Vì cơ sở dữ liệu SQLite không yêu cầu quản trị nên nó hoạt động tốt trong các thiết bị phải hoạt động mà không cần sự hỗ trợ của chuyên gia con người. SQLite rất phù hợp để sử dụng trong điện thoại di động, hộp giải mã tín hiệu số, TV, bảng điều khiển trò chơi, máy ảnh, đồng hồ, thiết bị nhà bếp, máy điều nhiệt, ô tô, máy công cụ, máy bay, cảm biến từ xa, máy bay không người lái, thiết bị y tế và rô bốt. "mạng vạn vật"

    Các công cụ cơ sở dữ liệu máy khách/máy chủ được thiết kế để sống bên trong trung tâm dữ liệu được chăm sóc tận tình ở lõi mạng. SQLite cũng hoạt động ở đó, nhưng SQLite cũng phát triển mạnh ở rìa mạng, tự bảo vệ mình trong khi cung cấp các dịch vụ dữ liệu nhanh và đáng tin cậy cho các ứng dụng có khả năng kết nối kém

  • Định dạng tệp ứng dụng

    SQLite thường được sử dụng làm định dạng tệp trên đĩa cho các ứng dụng máy tính để bàn, chẳng hạn như hệ thống kiểm soát phiên bản, công cụ phân tích tài chính, bộ lập danh mục và chỉnh sửa phương tiện, gói CAD, chương trình lưu giữ hồ sơ, v.v. Thao tác Tệp/Mở truyền thống gọi sqlite3_open() để đính kèm vào tệp cơ sở dữ liệu. Các bản cập nhật diễn ra tự động khi nội dung ứng dụng được sửa đổi nên tùy chọn menu Tệp/Lưu trở nên thừa. Tùy chọn menu File/Save_As có thể được triển khai bằng cách sử dụng API sao lưu

    Có nhiều lợi ích đối với phương pháp này, bao gồm hiệu suất được cải thiện, giảm chi phí và độ phức tạp cũng như độ tin cậy được cải thiện. Xem ghi chú kỹ thuật "aff_short. html" và "appfileformat. html" và "nhanh hơn. html" để biết thêm thông tin. Trường hợp sử dụng này có liên quan chặt chẽ với và trường hợp sử dụng bên dưới

  • trang web

    SQLite hoạt động tuyệt vời như một công cụ cơ sở dữ liệu cho hầu hết các trang web có lưu lượng truy cập thấp đến trung bình (có nghĩa là hầu hết các trang web). Lượng lưu lượng truy cập web mà SQLite có thể xử lý tùy thuộc vào mức độ trang web sử dụng cơ sở dữ liệu của nó. Nói chung, bất kỳ trang web nào có ít hơn 100 nghìn lượt truy cập/ngày sẽ hoạt động tốt với SQLite. Con số 100 nghìn lượt truy cập/ngày là một ước tính thận trọng, không phải là giới hạn trên cứng. SQLite đã được chứng minh là hoạt động với lưu lượng truy cập gấp 10 lần

    Trang web SQLite (https. //www. sqlite. org/) tất nhiên sử dụng SQLite và tính đến thời điểm viết bài này (2015), nó xử lý khoảng 400 nghìn đến 500 nghìn yêu cầu HTTP mỗi ngày, khoảng 15-20% trong số đó là các trang động liên quan đến cơ sở dữ liệu. Nội dung động sử dụng khoảng 200 câu lệnh SQL trên mỗi trang web. Thiết lập này chạy trên một máy ảo chia sẻ máy chủ vật lý với 23 máy chủ khác nhưng vẫn giữ mức tải trung bình dưới 0. 1 hầu hết thời gian

    Xem thêm. Hacker Thảo luận mới từ 13-12-2022

  • Phân tích dữ liệu

    Những người hiểu SQL có thể sử dụng shell dòng lệnh sqlite3 (hoặc các chương trình truy cập SQLite khác của bên thứ ba) để phân tích các bộ dữ liệu lớn. Dữ liệu thô có thể được nhập từ các tệp CSV, sau đó dữ liệu đó có thể được cắt và chia nhỏ để tạo vô số báo cáo tóm tắt. Phân tích phức tạp hơn có thể được thực hiện bằng cách sử dụng các tập lệnh đơn giản được viết bằng Tcl hoặc Python (cả hai đều được tích hợp sẵn SQLite) hoặc bằng R hoặc các ngôn ngữ khác bằng cách sử dụng các bộ điều hợp có sẵn. Các ứng dụng có thể bao gồm phân tích nhật ký trang web, phân tích thống kê thể thao, tổng hợp các số liệu lập trình và phân tích kết quả thử nghiệm. Nhiều nhà nghiên cứu tin sinh học sử dụng SQLite theo cách này

    Tất nhiên, điều tương tự cũng có thể được thực hiện với cơ sở dữ liệu máy khách/máy chủ doanh nghiệp. Ưu điểm của SQLite là nó dễ cài đặt và sử dụng hơn và cơ sở dữ liệu kết quả là một tệp duy nhất có thể được ghi vào thẻ nhớ USB hoặc gửi qua email cho đồng nghiệp

  • Bộ nhớ cache cho dữ liệu doanh nghiệp

    Nhiều ứng dụng sử dụng SQLite làm bộ đệm chứa nội dung có liên quan từ RDBMS doanh nghiệp. Điều này làm giảm độ trễ, vì hầu hết các truy vấn hiện xảy ra đối với bộ đệm cục bộ và tránh hành trình khứ hồi mạng. Nó cũng giảm tải trên mạng và trên máy chủ cơ sở dữ liệu trung tâm. Và trong nhiều trường hợp, điều đó có nghĩa là ứng dụng phía máy khách có thể tiếp tục hoạt động trong thời gian mất mạng

  • Cơ sở dữ liệu phía máy chủ

    Các nhà thiết kế hệ thống báo cáo thành công khi sử dụng SQLite làm kho lưu trữ dữ liệu trên các ứng dụng máy chủ đang chạy trong trung tâm dữ liệu, hay nói cách khác, sử dụng SQLite làm công cụ lưu trữ cơ bản cho máy chủ cơ sở dữ liệu dành riêng cho ứng dụng

    Với mẫu này, toàn bộ hệ thống vẫn là máy khách/máy chủ. khách hàng gửi yêu cầu đến máy chủ và nhận lại phản hồi qua mạng. Nhưng thay vì gửi SQL chung và lấy lại nội dung bảng thô, các yêu cầu của máy khách và phản hồi của máy chủ là cấp cao và dành riêng cho ứng dụng. Máy chủ dịch các yêu cầu thành nhiều truy vấn SQL, thu thập kết quả, xử lý hậu kỳ, lọc và phân tích, sau đó xây dựng câu trả lời cấp cao chỉ chứa thông tin cần thiết

    Các nhà phát triển báo cáo rằng SQLite thường nhanh hơn công cụ cơ sở dữ liệu SQL của máy khách/máy chủ trong trường hợp này. Các yêu cầu cơ sở dữ liệu được máy chủ tuần tự hóa, vì vậy đồng thời không phải là vấn đề. Đồng thời cũng được cải thiện bằng cách "phân mảnh cơ sở dữ liệu". sử dụng các tệp cơ sở dữ liệu riêng biệt cho các tên miền phụ khác nhau. Ví dụ: máy chủ có thể có cơ sở dữ liệu SQLite riêng cho từng người dùng để máy chủ có thể xử lý hàng trăm hoặc hàng nghìn kết nối đồng thời nhưng mỗi cơ sở dữ liệu SQLite chỉ được sử dụng bởi một kết nối

  • Định dạng truyền dữ liệu

    Bởi vì cơ sở dữ liệu SQLite là một tệp nhỏ gọn duy nhất ở định dạng đa nền tảng được xác định rõ, nên nó thường được sử dụng làm vùng chứa để truyền nội dung từ hệ thống này sang hệ thống khác. Người gửi tập hợp nội dung thành tệp cơ sở dữ liệu SQLite, chuyển tệp đó đến người nhận, sau đó người nhận sử dụng SQL để trích xuất nội dung khi cần

    Cơ sở dữ liệu SQLite tạo điều kiện truyền dữ liệu giữa các hệ thống ngay cả khi các điểm cuối có kích thước từ và/hoặc thứ tự byte khác nhau. Dữ liệu có thể là sự kết hợp phức tạp của các đốm nhị phân lớn, văn bản và các giá trị số hoặc boolean nhỏ. Có thể dễ dàng mở rộng định dạng dữ liệu bằng cách thêm các bảng và/hoặc cột mới mà không phá vỡ các bộ thu kế thừa. Ngôn ngữ truy vấn SQL có nghĩa là người nhận không bắt buộc phải phân tích toàn bộ quá trình truyền cùng một lúc mà thay vào đó có thể truy vấn nội dung nhận được khi cần. Định dạng dữ liệu "trong suốt" theo nghĩa là nó dễ dàng được giải mã để con người xem bằng nhiều công cụ nguồn mở có sẵn trên toàn cầu, từ nhiều nhà cung cấp

  • Lưu trữ tệp và/hoặc vùng chứa dữ liệu

    Ý tưởng Lưu trữ SQLite cho thấy cách SQLite có thể được sử dụng thay thế cho lưu trữ ZIP hoặc Tarballs. Kho lưu trữ các tệp được lưu trữ trong SQLite chỉ lớn hơn một chút và trong một số trường hợp thực sự nhỏ hơn so với kho lưu trữ ZIP tương đương. Và một kho lưu trữ SQLite có tính năng cập nhật nguyên tử và gia tăng cũng như khả năng lưu trữ siêu dữ liệu phong phú hơn nhiều

    Phiên bản hóa thạch 2. 5 trở lên cung cấp các tệp Lưu trữ SQLite dưới dạng định dạng tải xuống, ngoài kho lưu trữ tarball và ZIP truyền thống. sqlite3. exe dòng lệnh shell phiên bản 3. 22. 0 trở lên sẽ tạo, liệt kê hoặc giải nén tệp lưu trữ SQL bằng cách sử dụng

    SQLite là một giải pháp tốt cho bất kỳ tình huống nào yêu cầu đóng gói nội dung đa dạng thành một gói độc lập và tự mô tả để vận chuyển qua mạng. Nội dung được mã hóa ở định dạng tệp ổn định, đa nền tảng và được xác định rõ. Mã hóa hiệu quả và người nhận có thể trích xuất các tập hợp con nhỏ của nội dung mà không cần phải đọc và phân tích toàn bộ tệp

    Các kho lưu trữ SQL rất hữu ích dưới dạng định dạng phân phối cho các bản cập nhật nội dung hoặc phần mềm được phát cho nhiều khách hàng. Các biến thể của ý tưởng này được sử dụng, ví dụ, để truyền hướng dẫn lập trình TV đến hộp giải mã tín hiệu số và gửi thông tin cập nhật qua mạng đến hệ thống định vị xe

  • Thay thế cho các tập tin đĩa đặc biệt

    Nhiều chương trình sử dụng fopen(), fread() và fwrite() để tạo và quản lý các tệp dữ liệu ở các định dạng tự phát triển. SQLite hoạt động đặc biệt tốt khi thay thế cho các tệp dữ liệu đặc biệt này. Trái ngược với trực giác, SQLite có thể nhanh hơn hệ thống tệp để đọc và ghi nội dung vào đĩa

  • Cơ sở dữ liệu nội bộ hoặc tạm thời

    Đối với các chương trình có nhiều dữ liệu phải được sàng lọc và sắp xếp theo nhiều cách khác nhau, việc tải dữ liệu vào cơ sở dữ liệu SQLite trong bộ nhớ thường dễ dàng và nhanh chóng hơn và sử dụng các truy vấn có liên kết và mệnh đề ORDER BY để trích xuất dữ liệu trong . Sử dụng cơ sở dữ liệu SQL bên trong theo cách này cũng giúp chương trình linh hoạt hơn vì có thể thêm các cột và chỉ mục mới mà không phải mã hóa lại mọi truy vấn

  • Dự phòng cho cơ sở dữ liệu doanh nghiệp trong quá trình demo hoặc thử nghiệm

    Các ứng dụng khách thường sử dụng giao diện cơ sở dữ liệu chung cho phép kết nối với các công cụ cơ sở dữ liệu SQL khác nhau. Thật hợp lý khi đưa SQLite vào hỗn hợp các cơ sở dữ liệu được hỗ trợ và liên kết tĩnh công cụ SQLite với máy khách. Bằng cách đó, chương trình máy khách có thể được sử dụng độc lập với tệp dữ liệu SQLite để thử nghiệm hoặc trình diễn

  • Giao dục va đao tạo

    Bởi vì nó đơn giản để cài đặt và sử dụng (cài đặt đơn giản. chỉ cần sao chép sqlite3 hoặc sqlite3. exe có thể thực thi được trên máy đích và chạy nó) SQLite tạo ra một công cụ cơ sở dữ liệu tốt để sử dụng trong việc giảng dạy SQL. Sinh viên có thể dễ dàng tạo bao nhiêu cơ sở dữ liệu tùy thích và có thể gửi email cơ sở dữ liệu cho người hướng dẫn để nhận xét hoặc chấm điểm. Đối với những sinh viên nâng cao hơn, những người quan tâm đến việc nghiên cứu cách triển khai RDBMS, mã SQLite theo mô-đun và được nhận xét tốt và được ghi lại có thể đóng vai trò là cơ sở tốt

  • Phần mở rộng ngôn ngữ SQL thử nghiệm

    Thiết kế đơn giản, theo mô-đun của SQLite làm cho nó trở thành một nền tảng tốt để tạo nguyên mẫu các tính năng hoặc ý tưởng ngôn ngữ cơ sở dữ liệu thử nghiệm mới

Các tình huống khi RDBMS máy khách/máy chủ có thể hoạt động tốt hơn

  • Ứng dụng máy khách/máy chủ

    Nếu có nhiều chương trình máy khách gửi SQL đến cùng một cơ sở dữ liệu qua mạng, thì hãy sử dụng công cụ cơ sở dữ liệu máy khách/máy chủ thay vì SQLite. SQLite sẽ hoạt động trên hệ thống tệp mạng, nhưng do độ trễ liên quan đến hầu hết các hệ thống tệp mạng nên hiệu suất sẽ không cao. Ngoài ra, logic khóa tệp bị lỗi trong nhiều triển khai hệ thống tệp mạng (trên cả Unix và Windows). Nếu khóa tệp không hoạt động chính xác, hai hoặc nhiều máy khách có thể cố gắng sửa đổi cùng một phần của cùng một cơ sở dữ liệu, dẫn đến hỏng. Bởi vì sự cố này là kết quả của các lỗi trong quá trình triển khai hệ thống tệp cơ bản, nên SQLite không thể làm gì để ngăn chặn nó

    Một nguyên tắc nhỏ là tránh sử dụng SQLite trong các trường hợp cùng một cơ sở dữ liệu sẽ được truy cập trực tiếp (không có máy chủ ứng dụng can thiệp) và đồng thời từ nhiều máy tính qua mạng

  • Trang web có khối lượng lớn

    SQLite thường sẽ hoạt động tốt khi cơ sở dữ liệu phụ trợ cho một trang web. Nhưng nếu trang web viết nhiều hoặc quá bận đến mức yêu cầu nhiều máy chủ, thì hãy cân nhắc sử dụng công cụ cơ sở dữ liệu máy khách/máy chủ cấp doanh nghiệp thay vì SQLite

  • Bộ dữ liệu rất lớn

    Cơ sở dữ liệu SQLite có kích thước giới hạn ở mức 281 terabyte (248 byte, 256 tibibyte). Và ngay cả khi nó có thể xử lý các cơ sở dữ liệu lớn hơn, SQLite sẽ lưu trữ toàn bộ cơ sở dữ liệu trong một tệp đĩa đơn và nhiều hệ thống tệp giới hạn kích thước tối đa của tệp ở mức nhỏ hơn kích thước này. Vì vậy, nếu bạn đang xem xét các cơ sở dữ liệu ở mức độ này, bạn nên cân nhắc sử dụng một công cụ cơ sở dữ liệu máy khách/máy chủ để phân tán nội dung của nó trên nhiều tệp đĩa và có lẽ trên nhiều ổ đĩa.

  • Đồng thời cao

    SQLite hỗ trợ số lượng người đọc đồng thời không giới hạn, nhưng nó sẽ chỉ cho phép một người viết tại bất kỳ thời điểm nào. Đối với nhiều tình huống, đây không phải là vấn đề. Nhà văn xếp hàng. Mỗi ứng dụng thực hiện cơ sở dữ liệu của nó hoạt động nhanh chóng và tiếp tục hoạt động và không có khóa nào kéo dài hơn vài chục mili giây. Nhưng có một số ứng dụng yêu cầu đồng thời nhiều hơn và những ứng dụng đó có thể cần tìm kiếm một giải pháp khác

  • Danh sách kiểm tra để chọn đúng công cụ cơ sở dữ liệu

  • Dữ liệu có được tách khỏi ứng dụng bằng mạng không?

    Công cụ cơ sở dữ liệu quan hệ hoạt động như bộ lọc dữ liệu giảm băng thông. Vì vậy, tốt nhất là giữ công cụ cơ sở dữ liệu và dữ liệu trên cùng một thiết bị vật lý để liên kết giữa công cụ với đĩa có băng thông cao không phải đi qua mạng, chỉ có liên kết giữa ứng dụng với công cụ có băng thông thấp hơn

    Nhưng SQLite được tích hợp vào ứng dụng. Vì vậy, nếu dữ liệu nằm trên một thiết bị riêng biệt với ứng dụng, thì bắt buộc phải có liên kết giữa động cơ với đĩa có băng thông cao hơn trên toàn mạng. Điều này hoạt động, nhưng nó là tối ưu. Do đó, tốt hơn hết là chọn một công cụ cơ sở dữ liệu máy khách/máy chủ khi dữ liệu nằm trên một thiết bị riêng biệt với ứng dụng

    Nota Bene. Trong quy tắc này, "ứng dụng" có nghĩa là mã đưa ra các câu lệnh SQL. Nếu "ứng dụng" là một và nếu nội dung nằm trên cùng một máy vật lý với máy chủ ứng dụng, thì SQLite có thể vẫn phù hợp mặc dù người dùng cuối là một mạng khác.

  • Nhiều người viết đồng thời?

    Nếu nhiều luồng và/hoặc quy trình cần ghi cơ sở dữ liệu cùng một lúc (và chúng không thể xếp hàng và thay phiên nhau) thì tốt nhất là chọn một công cụ cơ sở dữ liệu hỗ trợ khả năng đó, luôn có nghĩa là công cụ cơ sở dữ liệu máy khách/máy chủ

    SQLite chỉ hỗ trợ một người viết tại một thời điểm cho mỗi tệp cơ sở dữ liệu. Nhưng trong hầu hết các trường hợp, một giao dịch ghi chỉ mất một phần nghìn giây và vì vậy nhiều người viết có thể thay phiên nhau một cách đơn giản. SQLite sẽ xử lý nhiều ghi đồng thời hơn nhiều người nghi ngờ. Tuy nhiên, các hệ thống cơ sở dữ liệu máy khách/máy chủ, bởi vì chúng có sẵn một quy trình máy chủ dài hạn để điều phối truy cập, thường có thể xử lý nhiều ghi đồng thời hơn nhiều so với SQLite.

  • Dữ liệu lớn?

    Nếu dữ liệu của bạn tăng đến kích thước mà bạn không thoải mái hoặc không thể vừa với một tệp trên đĩa, thì bạn nên chọn một giải pháp khác ngoài SQLite. SQLite hỗ trợ cơ sở dữ liệu có kích thước lên tới 281 terabyte, giả sử bạn có thể tìm thấy một ổ đĩa và hệ thống tệp sẽ hỗ trợ các tệp 281 terabyte. Mặc dù vậy, khi kích thước của nội dung có vẻ như có thể leo vào phạm vi hàng terabyte, sẽ tốt hơn nếu xem xét một cơ sở dữ liệu máy khách/máy chủ tập trung

  • Nếu không → chọn SQLite

    Đối với bộ nhớ cục bộ trên thiết bị có khả năng ghi đồng thời thấp và nội dung ít hơn một terabyte, SQLite hầu như luôn là giải pháp tốt hơn. SQLite nhanh và đáng tin cậy và không yêu cầu cấu hình hoặc bảo trì. Nó giữ mọi thứ đơn giản. SQLite "chỉ hoạt động"

    Làm cách nào để đọc tệp SQLite bằng Python?

    SQLite Python. Truy vấn dữ liệu .
    Đầu tiên, thiết lập kết nối tới cơ sở dữ liệu SQLite bằng cách tạo đối tượng Kết nối
    Tiếp theo, tạo đối tượng Con trỏ bằng phương thức con trỏ của đối tượng Kết nối
    Sau đó, thực hiện một câu lệnh SELECT
    Sau đó, gọi phương thức fetchall() của đối tượng con trỏ để lấy dữ liệu

    Làm cách nào để kết nối cơ sở dữ liệu SQLite với Python?

    Kết nối với cơ sở dữ liệu . /usr/bin/python nhập sqlite3 conn = sqlite3. #!/usr/bin/python import sqlite3 conn = sqlite3. kết nối('kiểm tra. db') in "Đã mở cơ sở dữ liệu thành công"; . kỉ niệm. để tạo cơ sở dữ liệu trong RAM.

    Làm cách nào để nhập sqlite3 bằng Python?

    Python và SQL .
    nhập sqlite3 # Tạo kết nối SQL tới cơ sở dữ liệu SQLite của chúng tôi con = sqlite3. .
    nhập sqlite3 # Tạo kết nối SQL tới cơ sở dữ liệu SQLite của chúng tôi con = sqlite3. .
    nhập gấu trúc dưới dạng pd nhập sqlite3 # Đọc kết quả truy vấn sqlite vào DataFrame của gấu trúc con = sqlite3

    Làm cách nào để tạo cơ sở dữ liệu SQLite trong Python?

    Để tạo cơ sở dữ liệu, trước tiên, bạn phải tạo đối tượng Kết nối đại diện cho cơ sở dữ liệu bằng hàm connect() của mô-đun sqlite3. For example, the following Python program creates a new database file pythonsqlite. db in the c:\sqlite\db folder.