Уже занятая тема, но из того, что я прочитал здесь, следующее помогло мне понять, как она работает внутри:
def bar(a=[]):
print id(a)
a = a + [1]
print id(a)
return a
>>> bar()
4484370232
4484524224
[1]
>>> bar()
4484370232
4484524152
[1]
>>> bar()
4484370232 # Never change, this is 'class property' of the function
4484523720 # Always a new object
[1]
>>> id(bar.func_defaults[0])
4484370232
sqlite - это база данных документов, означающая, что она в значительной степени похожа на плоский файловый хранилище ваших данных с самым минимальным движком базы данных сверху, поэтому она равна 300kb. Что вы можете сделать в качестве решения, это скопировать db из вашего удаленного местоположения в ваше местоположение через ftp или получить доступ к нему, назначив ему сетевое расположение. Будьте осторожны, хотя только один пользователь может писать в sqlite за раз.
Вы можете использовать php на сервере для запуска любых команд sql, которые вам нужны, и просто перейти к php-странице с устройства.
вы можете рассмотреть возможность переключения на PostgreSQL вместо SQLite, манипуляции с базой данных очень похожи. Небольшие различия в обработке первичных ключей и т. Д. Вы можете использовать Google. Например, в инструкции INSERT вы должны передать NULL в SQLite в качестве первичного ключа, а в Postgre вы передадите его как DEFAULT (если вы хотите, чтобы база данных создала для вас ключ).
Например, в Python3 различие в коде, о котором я знаю, это то, что PostgreSQL позволяет удаленно подключаться и что исключение синтаксиса SQL-инъекций несколько отличается, поскольку метод SQLite3 будет с ?
, а PostgreSQL9.5 - с %s
Переключение на Postgre предоставит вам возможность удаленного подключения и станет определенным шагом от использования локальной базы данных (которая предназначена только для приложений с малой и средней пропускной способностью).
SQLite не является сетевой базой данных, поэтому у нее нет встроенных в нее возможностей сетевого подключения.
Вам нужно либо:
Веб-приложение является, по существу, веб-службой. Если вы используете веб-приложение поверх этого БД, просто выставляйте определенные уровни доступа к БД только админам.
Не рекомендуется делать это, потому что несколько потоков / клиентов / и т. Д. доступ к SQLite DB одновременно может привести к проблемам параллелизма очень быстро.
SQLite только для файлов. Нет никакого способа поговорить с ним по TCP / IP.
Как и файл базы данных Access, вы должны иметь файл базы данных в общей сетевой папке. Путь, как правило, будет UNC-путём, например «\ server \ sharename \ folderpath \ databasefile».
Проблема заключается в том, что строка соединения, которую вы построили, не является строкой соединения. Это частичная строка. У вас есть это:
DataSource = @"\\\\" + txtipaddress.Text + @"\qscanDBAttacheds\test.s3db;Version=3;New=False;Compress=True;"
Часть «DataSource» должна быть частью строкой, которую вы создаете. У вас этого нет. Вам это нужно:
string connString = @"Data Source=\\" + txtipaddress.Text + @"\qscanDBAttacheds\test.s3db;Version=3;New=False;Compress=True;"
Navicat может подключаться через SSH к удаленной базе данных sqlite.
Для меньшего проекта im с использованием phpliteadmin
Вы не можете напрямую обращаться к базе данных sqlite удаленно. Если вам нужно поделиться им, вам нужно будет разработать веб-сервис и поговорить с веб-службой, а не с базой данных из вашего приложения Qt.
Есть несколько инструментов, которые действуют как веб-сервис для таких вещей, как что, например этот сайт имеет некоторые ссылки.